String substitution in Views Contextual filter parameter?

In Drupal 9, I have a View called News.

The View is displayed at the following path:

/news

I can edit it at the following path:

/admin/structure/views/view/news/edit

It has the following Contextual filter:

Content datasource: Content type

The contextual filter values are provided by the URL.

When the filter value is NOT in the URL: Provide default value

Type: Fixed

Fixed value: all

Exception value: all

If this value is received, the filter will be ignored; i.e, "all values"

This works well for content types like article and blog_post.

When the View is displayed for the path /news/article, the contextual filter shows only Content type article.

When the View is displayed for the path /news/blog_post, the contextual filter shows only Content type blog_post.

So far, so good.

Now, the client has a custom content type called "Youtube Video" with machine name youtube_video.

When this View is displayed for the path /news/youtube_video. the contextual filter shows only Content type youtube_video.

But the client wants the path to be /news/video.

What are my options?

Some constraints:

  • The client definitely wants the path to be /news/video, and not something like /news?type=video.
  • I don’t think that it’s trivial to match /news/foo and substitute bar for foo as the input for a contextual filter.
  • I know how to use positional parameters in a route, but I don’t think I can easily override the route for just /news/foo while preserving the contextual filter as it is for the other content types.

Some flexibility:

  • The Drupal 9 site is brand new, and I’m about to migrate the content from Drupal 7 via Migrate API, so it’s possible to change the machine name of the youtube_video content type to video during the migration. Then this View would work without modification. (The problem would be figuring out everything else that references the machine name youtube_video and changing that to video also — potentially a lot of effort.)
  • It may be possible to alter the query parameters conditionally using hook_views_pre_view() or hook_views_query_alter(), but I only want to do this if a specific parameter is matched.
This article was republished from its original source.
Call Us: 1(800)730-2416

Pixeldust is a 20-year-old web development agency specializing in Drupal and WordPress and working with clients all over the country. With our best in class capabilities, we work with small businesses and fortune 500 companies alike. Give us a call at 1(800)730-2416 and let’s talk about your project.

FREE Drupal SEO Audit

Test your site below to see which issues need to be fixed. We will fix them and optimize your Drupal site 100% for Google and Bing. (Allow 30-60 seconds to gather data.)

Powered by

String substitution in Views Contextual filter parameter?

On-Site Drupal SEO Master Setup

We make sure your site is 100% optimized (and stays that way) for the best SEO results.

With Pixeldust On-site (or On-page) SEO we make changes to your site’s structure and performance to make it easier for search engines to see and understand your site’s content. Search engines use algorithms to rank sites by degrees of relevance. Our on-site optimization ensures your site is configured to provide information in a way that meets Google and Bing standards for optimal indexing.

This service includes:

  • Pathauto install and configuration for SEO-friendly URLs.
  • Meta Tags install and configuration with dynamic tokens for meta titles and descriptions for all content types.
  • Install and fix all issues on the SEO checklist module.
  • Install and configure XML sitemap module and submit sitemaps.
  • Install and configure Google Analytics Module.
  • Install and configure Yoast.
  • Install and configure the Advanced Aggregation module to improve performance by minifying and merging CSS and JS.
  • Install and configure Schema.org Metatag.
  • Configure robots.txt.
  • Google Search Console setup snd configuration.
  • Find & Fix H1 tags.
  • Find and fix duplicate/missing meta descriptions.
  • Find and fix duplicate title tags.
  • Improve title, meta tags, and site descriptions.
  • Optimize images for better search engine optimization. Automate where possible.
  • Find and fix the missing alt and title tag for all images. Automate where possible.
  • The project takes 1 week to complete.