Contextual Filters and Arguments in Drupal

contextual-filter

Sometimes the name you give something is really important.

In Drupal 6, a key feature in Views was called “arguments”. This term made perfect sense to developers, but caused plenty of raised eyebrows amongst news users.

Both the name and location of this feature has changed in Drupal 7. Arguments are now called “Contextual filters”.

Here’s an introduction to arguments and contextual filters. We’ll show you why they are so useful, whatever they may be called.

Where are Arguments or Contextual Filters?

In the Drupal 6 views screen, Arguments were right in the center of the page:

media_1400259595835.png

With Drupal 7, the Arguments area was moved and re-named. There’s now a whole, hidden area of the Views screen that is simply called “Advanced”:

media_1400259431382.png

Under that Advanced tab is the “Contextual Filters” area. That is where Arguments have moved to.

media_1400259618101.png

Examples of Contextual Filters: Default Views

Several of the default Views contain contextual filters and would make good starting points to learn more.

Go to Structure > Views and enable both the Archive and Glossary views to see them in action.

The Archive view dynamically organizes content into the month it was published. A normal filter would only allow us to show content from certain months. A contextual filter changes which months it shows, based on the page you’re viewing.

media_1401280802586.png

Here’s the contextual filter that makes that possible:

media_1401280670506.png

The Glossary view is similar to the Archive, but it dynamically sorts content by the first letter of the title.

An ordinary filter could show all content that starts with A or B, but a contextual filter is flexible enough to show any of those, depending on the context

media_1401280748143.png

Here’s the contextual filter for the Glossary:

media_1401280708880.png

Examples of Contextual Filters: Fields

One of the most common examples of a contextual filter is a calendar created with Views:

media_1401279238647.png

In order to functional correctly, the calendar needs a Contextual Filter which pulls from a Date field.

A simple filter would not suffice here because it’s not flexible enough. The user can change between June, July, August and other months. They could even change to view weeks, days or years. Only a contextual filter can adapt automatically to those different displays.

Examples of Contextual Filters: Users

A second example of contextual filters involves creating a personalized newsfeed for users. In the View below, the users only see movies that are in genres they have selected:

media_1401279615605.png

This is possible because we’ve added a contextual filter for the user. The view is

An ordinary filter would allow us to choose “Action”, “Comedy” or “Romantic” movies, which are set up as taxonomy terms.

However, a contextual filter is flexible enough so that we can dynamically change those taxonomy terms based on the user.

Examples of Contextual Filters #4: Nodes

This third and more complex example is part of our video class on Views.

In this part of the class, Rod is building a clone of IMDB.com. He wants to automatically show a list of actors who have appeared in the movie that’s showing on the page.

Again, a simple filter would suffice to show a list actors, but not one that can dynamically change based on the main node being displayed. Watch the video to see how it’s done:

Drupal 6 Users

If you are still on Drupal 6, Mustard Seed Media have a very useful video for you:

{snippet mustard-seed-arguments}

Author

  • Steve Burge

    Steve is the founder of OSTraining. Originally from the UK, he now lives in Sarasota in the USA. Steve's work straddles the line between teaching and web development.

0 0 votes
Article Rating
Subscribe
Notify of
5 Comments
Oldest
Newest
Inline Feedbacks
View all comments
NadsH
NadsH
9 years ago

Hi,

Thanks for the example at

Examples of Contextual Filters #4: Nodes

demonstrating with Node ID

How do we do the same with Node Title?
Thanks

willabby
9 years ago

We have a view that is similar to a calendar in that it is generating a summary using a contextual filter on a date field, which gives us a page w a listing of “Month,Year” with each item linking to the more detailed view of all nodes from that month/year.
The url for the summary page is “meetings/2014”. The url for the view generated by the contextual filter is, for example, for November: “meetings/2014/2014-11”
We are trying to figure out where the url date format (2014-11) is being generated from, and if we can change that? I have googled exhaustively, but can’t find anything that helps. I feel like we are missing some basic setting, but have looked everywhere.
Thanks for any help you can provide.

arjun
arjun
5 years ago

I am using panels and page manager for my pages my page is looking like example .com/news?country[33]=33&year[116]=116

i need to modify this to hexample .com/news/country-america-japan-year-2019-2020

can you please help me on this i am using Drupal 8

magnificent_dev
1 year ago

Your Images are broken mate

robbieadair
11 months ago

Thank you for letting us know! We have fixed the images.

5
0
Would love your thoughts, please comment.x
()
x