Free Videos about Mastering Views

How To: Using View's Arguments

Play Video
Movie link (right-click to download)
Problem with this video? Contact me

Views, the uber-module for pulling selective content out of your Drupal database, which formerly, only a top module developer could dream of, enables you to use arguments.

What the heck are Views Arguments and how do I use them?”

I’m glad you asked! Using the Arguments feature of Views increases your ability to add all kinds of coolness (and may make you cool in the process).

The big trick is parsing through the thick layer of coolness provided by the feature. If you’re dying to know, and just starting out, then watch this video for a great head start.

If you’re already familiar with Views and using Arguments, and you’re always seeking that cool little tip, then here you go.

How do you limit a view to a User’s uid value?” Meaning, how can any given view only be seen by the logged in user who owns that content.

Here’s the Views Argument PHP Validator code.

global $user;
return $argument[0] == $user->uid;

SPECIAL NOTE! The above code can be used to limit access to a view using validation. I show this for the purpose of knowing about advanced usage. If you simply want to limit a view to the current user then use a Views Filter and filter based on the current user item.

Don’t get it? Watch the video then. ;)

Hi Matt,
You mentioned something about how you allow users to control the published/unpublished status of nodes without giving them the administer nodes permission.
Could you please elaborate?
 Thanks.

BTW, great how-to video.

Yes, I did mention I would show that. Sorry about the omission

It's done via a module called Override Node Options. This is the module you need which will allow other bloggers (or any other types of roles) to perform options which are typically reserved for the admin account or those with administer nodes permissions.

This video made me actually understand the Views arguments stuff, whereas before I sort of got half of it - I did use arguments in my Views, but I didn't understand how to do more complicated things. I think now I'll be able to make some custom archive views that I wanted, using Date arguments. Thanks!

Me too! Thank you now I understand it fully!

Very nice tutorial--addresses an issue I've been wrestling with; that is, how to limit a view to a specific user, not just a role.

Thank YOU!

This video just makes me appreciate how smart the big brains are that create Drupal, and how smart the people are who can make it sing. Got to learn php, but I think it will make my head explode.

Thanks for a great video.

Thank you matt. This video gave me a much broader understanding of Views 2 arguments and their application.

Why there's nothing to watch or instruction to show how to take it?

It is great when people make nice instructional videos. I will be hunting for some way to view this. It is done with quit-time, Firefox just isn't supporting that plug-in. Is there a way to download another format or another page that has a different format?

thank gawd I can rewind and play a whole lot of times!!!!
I wish you success!

thanks

Hey, I finally got to see this.. big help and i will watch it few times to get a better understanding Thank You for posting this.
I ended up having to watch it on a linux-ubunu box while listening to it on an xp box. The linux wouldn't give sound, but would show the view and the apposite for xp.

thx for you video.
I followed your instruction, in devl module. I am sure my "user-profule.tpl.php" has worked. However, the "phptemplate_preprocess_user_profile" function have never been called. Could you get me some hints?

my e-mail:Gassa@yahoo.com.cn
MSN: Gassa_yan@hotmail.com

Matt,

Thanks for a brilliant video, it really helped me understand views better.

I just wanted to draw your attention to the "me" module. It allows you to specify /me/ within a menu link. The module will then replace it with the UID. It means you can now directly point your menu item at your user view and it all works without having to go in and modify templates etc. Hope this helps!

George

woo, the me module is great, but I can't figure it out how to use this module, can you help me?

It would be nice to load this video in flash. Or just load to youtube. Many people dont have quicktime.

I know all to well about QUIT time. I have no idea why people use it? go figure... Just view the video on a Linux box and listen to the sound on an xp box, the only trick is to get them synchronized so you can learn from it. It really is a great video when you figure out how to watch it.

Hi Matt,
The tutorials are great--a big help for people with little programming/drupal experience like me.
One thing: couldn't you accomplish the same task a little easier by using filters instead of arguments? There is an option in the filter section to filter to the current user's ID. So you would just create the view, then filter it so only the current user's content appears. Perhaps there is a good reason not to do it this way?
 Thanks.

it's still a mystery to me why you would use arguments in this fashion when you can accomplish this with a filter . . .

Hey guys, YES, YES and extra YES. Use the Filter > User > Current when you ONLY want to filter based on the current user!

After watching the video myself, I did a poor job of explaining the "why" I was showing the validation options for arguments. The example I pulled from, which was one of my own sites, used a bit more logic than simply

global $user;
return $argument[0] == $user->uid;

I had stripped it out because of trying to simplify the video to show only the current user (and didn't think of the filter when I was shooting). My original code looks like this.

global $user;
return $argument[0] == $user->uid || user_access('administer nodes');

Which you can't do with a view when using the filter of current user.

My goal was to highlight the power of using argument validation, however, at the expense of the simplicity of using the filter for current user.

Granted, if you need an admin view, versus a user content view, you can certainly do this by creating two different views. Being that I like to multi-purpose my views, I sometimes tack on conditions such as user_access() or user_roles() - both Drupal functions for those not in the know - and using the php function in_array() when using argument validation.

Thanks for bringing this to light and if you need to keep things simple then use the filter method. If you want/need to know about the more powerful way then use the argument validations to control who can actually access the View.

WARNING: MAJOR DRUPAL GEEKY DEVELOPER STUFF FOLLOWS - For the super geeky info, the way access is managed by Views is this. It uses a function named views_access and this is what is stored in the access_callback field within the menu_router table in the database. Views uses not only the access specified on the view itself (i.e. by permission or by role) but also based on the validation arguments. This can make complex validation very difficult to accomplish. However, if you understand that you can put drupal functions within the validation arguments, then you're headed down a great path to advanced Views creation.

Hey,

I'm implementing this on a school site where the students can only view the assignments that they handed in but I also need the capability for the teacher (another role) to hand in assignments for his students manually and have these also appear to the student in this view.

Does the || user_access('administer nodes') conditional accomplish this or do i need something else?

Thanks a bunch

Super video, touched on so many areas. Keep up the good work!

I've tried setting up a view to be exactly as you describe, but am having trouble getting it to work? It seems to work fine for me as an admin, but for a normal authenticed user it doesn't? Strangly, if I change the validator code to below it works, but will still show the menu item on another users profile page.

global $user;
return $handler->argument == $user->uid;

Below is the view if it helps? Any ideas why this isn't working?

$view = new view;
$view->name = 'my_test';
$view->description = '';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('fields', array(
  'type' => array(
    'label' => 'Type',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'html' => 0,
    ),
    'link_to_node' => 0,
    'exclude' => 0,
    'id' => 'type',
    'table' => 'node',
    'field' => 'type',
    'relationship' => 'none',
  ),
  'title' => array(
    'label' => 'Title',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'html' => 0,
    ),
    'link_to_node' => 1,
    'exclude' => 0,
    'id' => 'title',
    'table' => 'node',
    'field' => 'title',
    'relationship' => 'none',
  ),
  'timestamp' => array(
    'label' => '',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'html' => 0,
    ),
    'link_to_node' => 0,
    'comments' => 1,
    'exclude' => 0,
    'id' => 'timestamp',
    'table' => 'history_user',
    'field' => 'timestamp',
    'relationship' => 'none',
  ),
  'comment_count' => array(
    'label' => 'Comments',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'html' => 0,
    ),
    'set_precision' => FALSE,
    'precision' => 0,
    'decimal' => '.',
    'separator' => ',',
    'prefix' => '',
    'suffix' => '',
    'exclude' => 0,
    'id' => 'comment_count',
    'table' => 'node_comment_statistics',
    'field' => 'comment_count',
    'relationship' => 'none',
  ),
  'last_updated' => array(
    'label' => 'Updated',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'html' => 0,
    ),
    'date_format' => 'small',
    'custom_date_format' => '',
    'exclude' => 0,
    'id' => 'last_updated',
    'table' => 'node_comment_statistics',
    'field' => 'last_updated',
    'relationship' => 'none',
  ),
  'name' => array(
    'label' => 'Name',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'html' => 0,
    ),
    'link_to_user' => 1,
    'overwrite_anonymous' => 0,
    'anonymous_text' => '',
    'exclude' => 0,
    'id' => 'name',
    'table' => 'users',
    'field' => 'name',
    'relationship' => 'none',
  ),
  'uid' => array(
    'label' => 'Uid',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'html' => 0,
    ),
    'link_to_user' => 0,
    'exclude' => 1,
    'id' => 'uid',
    'table' => 'users',
    'field' => 'uid',
    'relationship' => 'none',
  ),
));
$handler->override_option('arguments', array(
  'uid' => array(
    'default_action' => 'not found',
    'style_plugin' => 'default_summary',
    'style_options' => array(),
    'wildcard' => '',
    'wildcard_substitution' => '',
    'title' => '',
    'default_argument_type' => 'fixed',
    'default_argument' => '',
    'validate_type' => 'php',
    'validate_fail' => 'not found',
    'break_phrase' => 0,
    'not' => 0,
    'me_alias' => 0,
    'me_redirect' => 0,
    'id' => 'uid',
    'table' => 'users',
    'field' => 'uid',
    'validate_user_argument_type' => 'uid',
    'validate_user_roles' => array(
      '2' => 0,
      '3' => 0,
      '5' => 0,
      '6' => 0,
    ),
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'none',
    'default_options_div_prefix' => '',
    'default_argument_user' => 0,
    'default_argument_fixed' => '',
    'default_argument_php' => '',
    'validate_argument_node_type' => array(
      'blog' => 0,
      'documentation' => 0,
      'download' => 0,
      'event' => 0,
      'external_app' => 0,
      'landing' => 0,
      'news' => 0,
      'page' => 0,
      'project' => 0,
      'vert_landing' => 0,
    ),
    'validate_argument_node_access' => 0,
    'validate_argument_nid_type' => 'nid',
    'validate_argument_vocabulary' => array(
      '4' => 0,
      '3' => 0,
      '2' => 0,
      '1' => 0,
    ),
    'validate_argument_type' => 'tid',
    'validate_argument_transform' => 0,
    'validate_user_restrict_roles' => 0,
    'validate_argument_is_member' => 0,
    'validate_argument_php' => 'global $user;
    return $argument[0] == $user->uid;',
  ),
));
$handler->override_option('access', array(
  'type' => 'none',
));
$handler->override_option('title', 'My Test');
$handler->override_option('empty', 'php validator didn\'t validate');
$handler->override_option('empty_format', '1');
$handler->override_option('items_per_page', 20);
$handler->override_option('use_pager', '1');
$handler->override_option('style_plugin', 'table');
$handler->override_option('style_options', array(
  'grouping' => '',
  'override' => 1,
  'sticky' => 0,
  'order' => 'desc',
  'columns' => array(
    'type' => 'type',
    'title' => 'title',
    'timestamp' => 'title',
    'comment_count' => 'comment_count',
    'last_updated' => 'last_updated',
  ),
  'info' => array(
    'type' => array(
      'sortable' => 1,
      'separator' => '',
    ),
    'title' => array(
      'sortable' => 1,
      'separator' => '',
    ),
    'timestamp' => array(
      'separator' => '',
    ),
    'comment_count' => array(
      'sortable' => 1,
      'separator' => '',
    ),
    'last_updated' => array(
      'sortable' => 1,
      'separator' => '',
    ),
  ),
  'default' => 'last_updated',
));
$handler = $view->new_display('page', 'Page: My Test Default', 'page_1');
$handler->override_option('path', 'user/%/test');
$handler->override_option('menu', array(
  'type' => 'tab',
  'title' => 'My Test Default',
  'description' => '',
  'weight' => '0',
  'name' => 'navigation',
));
$handler->override_option('tab_options', array(
  'type' => 'tab',
  'title' => 'My Test',
  'description' => '',
  'weight' => '0',
));

See my comment above regarding the use of a Filter (for the current user) versus the validation argument. In the video, I show the method of using a validation argument when I should have shown the more simple method of using the provided Filter for current user. The biggest benefit of using the Filter > User > Current option is that it limits the SQL statement itself within the WHERE clause to only that user, meaning you can't even hope to return content not specific to that user. However, you also can't access that same content based on other conditions (or arguments) - such as if the current user has a permission which might allow them to access that user's content.

I've clarified why I showed the argument method above, but in many cases the Filter for User:Current will work just fine.

As mentioned above in the comment, it can get very tricky making validations work properly when you have a complex view which is using multiple levels of access.

I hope this info gets you going with your view.

Matt

Pretty important comment here, since the tutorial has a VERY critical error that will lead to MUCH confusion with people, so please read :)

I just found this out after going through your tutorial (otherwise extremely helpful) and trudging through with troubleshooting for awhile.

Turns out that when $argument is a single variable, you should be calling just $argument, because argument is just a string, and so the "array" is actually the arguments individual characters. So $argument[0] for user 15 for a path like node/%/whatevs is actually "1". This means only admins can view it (which is how most will be doing testing, compounding confusion when it doesn't work for other users). I'm pretty sure that this was the case for the poster above.

Anyway, this is the thread where I found out about it myself:
http://drupal.org/node/653058

Cheers!

Try using

global $user;
return $argument == $user->uid;

I tried explaining below, but since $argument is a string and not an array, $argument[0] returns the first digit/character of that string, which is probably "1" by the sounds of it (say, for instance, with user/15/test), since you were saying you could still see it as admin.

As Matt alluded to in the tutorial, this would also have worked:

global $user;
return arg(1) == $user->uid;

arg() is system-level item (not just views), and with the following values
arg(0) = 'user'
arg(1) = '15'
arg(2) = 'test'

Thank you for the great video :)

Great video tutorial Matt.. just what i needed for my project.. thank you so much..

I wish you had explained the options in the Configure Argument box more. For example, when do you use the Relationship box (and why wouldn't you?)

I have two custom content types (Societies and Patches), one of which is related to the other via a Node reference. I have created a view that lists all of the patches in individual tables by Society, which is fine. But what I really want is to create a view that lists only the patches in a given society. It seems like this would be a good place to use an argument, but I can't get it to output anything.

I know this is vague and it's hard to concisely explain all the details of my situation in a way that makes it easy to help... even if you could point me to more documentation about Views and Arguments, I'd be really grateful.

thanks,
 Liz

There are some great how-to videos out there, but if they were giving prizes for the best ones, this would be at the top of the list.
Very well done and thank you.

Orestis

Can I ask a related question?

I want to add a block display to list all the upcoming events...and when the current date increases, I want the view to strike out the events from that list. How would I use this view to accomplish that?

thank you!

Rendering the content from a View has nothing to do with how it's presented.

I'm guessing you want to use the CSS of {text-decoration: line-through} on the dates which have since passed. Showing them as having already happened.

If you'd like to retain dates that are both in the past and the future, and show the past dates as being "over" (via the use of a strike thru). Then you'll need to hack some code - at least currently. Each view can output it's content within the View's display (in your case a block display) using a Views style. Views provides four by default. For some styles you can specify the Input Format.

So what you likely need, unless there is a module out there that does this already, is something that will evaluate the date as being past or future and then wrap an html element (like a span tag) around dates which have passed.

Things to check might be the following

  • If the Date module supports this (I don't know if it does, but it might - and if not, then suggest it as a feature in the Date Issue Queue ) and using a date field for your content type, they probably just need to add a preference and modify the theme function responsible for the output of the date (see my suggestion below)
  • Searching for an Input format that supports adding a CSS class to recognized date values which are in the past (this one would actually be pretty easy to code - if only I had the time). This could also work when you're not using specific Date fields in content types.
  • Researching/Learning how to use preprocess functions in order to apply the CSS class to any dates in the past. This one would be the quickest to do, but not the most desirable method because you'd have to use both regex and something like php's strtotime to rip through the data in the node and determine if the date is in the past or future.

Ultimately, it sounds like the best solution would be if the Date module would provide this feature. It's responsible for passing the date field to the View (provided you're using the Date module) and it could provide a cck formatter to make that CSS class happen. The best would be a mix of CSS classes - like .date-past, .date-today and .date-future on the output of date fields. It could also be written into the date.theme file and therefore the theme() function that renders the dates. Which means you can actually override this theming by putting a new modified version of theme_date_display_combination() [WARNING: It's a long one!] into your template.php file. This is where you could apply the additional CSS classes that would let you make dates in the past use the strike-thru CSS. That would be my best suggestion.

Much luck! - Matt

Great video. For some reason, it cuts out 2/3 of the way through. Maybe I'm crazy, but it wouldn't hurt to prove me wrong!

Hi Matt
Thank you for this clear presentation on arguments/views. You obviously have a gift for making the complicated accessible in contrast to some developers who seem to make the complicated even worse - thanks for the effort you put into it.
 Kit

Thanks for the kudos! If there are aspects or areas you want to know more about, you can always contact me with requests. - Matt

Thaks for this great video. I am starting with drupal and I have read about views and arguments. My problem: I have two custums content types (Incidences and equipmet), one is related to the other via node reference. I have created a view that shows a list of all the incidences, but what if I need to show only the incidences of one equipment? I know I have to work with arguments but I dont know how.
I dont know how to create an argumet from a cck field value via PHP. If you know any other documentation that I can use, or any hint about the subject please email me. I found this sentence in drupal site"http://drupal.org/node/372064"
Sorry for my english

Thaks again I solve the problem for me and was not so hard to do it. Your video is very enlighting

Hi
I need to send multiple terms to a view, it works fine when addressing the view directly through the url e.g.
path/+2+1/+3+5+4
but when I send this from within a module the arguments are encoded to
path/%252B2%252B1%252F%252B3%252B5%252B4%252F
which of courses produces a negative result.
It's great being able to use multiple terms buy how do you send them? Is there any way to stop this encoding from within a module or any other way round this?
 Thanks

I've solve this for my own purposes - not an ideal solution but it got me moving again:-

Drupal does not encode "-" so I sent that as my multiple term separator and tweaked some views code in views_handler_arguments.inc to allow it.

Stay addicted !!

Great video! I love the way you explain everything, you make it easy to follow, you're a great teacher!

I needed something similar to what you demo'd, but with blocks instead of pages.

In my site people are able to create games, and I wanted to list all the games a person has made in that person's profile for all to see, not as a new page people would have to navigate to (why? because I'm lazy to mess with templates like you did :) ) but as a block right there in the profile.

Here's how I did it:

1.- Added argument "User:Uid"
2.- For "Action to take if argument is not present" I chose "Provide default argument", then "User ID from URL".

That did it! Of course, in the blocks menu I had to configure that block to only show up in pages with the url "user/*".

Thanks again for the videos!

excellent video quality, excellent explaining. keep it up. I would really restless to see your more advance tutorial on views. good luck
Regards
 Kaay

Hey Matt, great video. This video totally gave me a whole new perspective on how to use teh Views module.

If was a bit confused about Validation code part of the video, but after watching it again, I understood it.

I discovered the following article: http://drupal.org/node/70145, and think it would be very useful, but it seems it is not implemented in Views 2. Is this true?

What I want to do is define a Path using arg %1 and then define a representative Title of this path using arg %2.

How can I do this without "Argument Handling code"?

Thanks

I found a work-around using Drupal functions views_get_current_view() and drupal_set_title().

Inserting the following PHP code within Header set for "Input Format: PHP Code:

<?php
$view
= views_get_current_view();
$args = $view->args;
$task_project_id = $args[0]; // %1
$project_name = __custom_function_get_project_name(task_project_id

$title
= 'Tasks of Project "'. $project_name.'"';
drupal_set_title($title);
?>

Great video! I followed your example and everything seemed to work great except when i pass a uid greater than nine. The PHP validator code seems to return false when the uid is double digits. Have you seen anything like this before or have any suggestions? Thanks!

Good video! I'm trying to figure out how to create a View Block that shows related content, but with a slight twist. I've got a views block that shows text from a field on the current node. But the issue is that when a moderator views a revision of that node which also contains the field, they are unable to see the field text relevant to that revision. So they don't see the revised text from the field!

Any idea how I can create a block that shows the related field in the current node revision being viewed? So a field from node/%/revision/% for example...

Hi Matt, and thanks for a great tutorial.

I have a link in the user area working well (after seeing your tutorial) along side a view I have created. The only thing (maybe its me) is if say someone registers, and goes to their account and clicks on 'View My Content' or Posts before they have created any content, I get page not found come up.
Any suggestions... do I need to include an 'if' statment to the new variable in the template file to only show the link if the user has created content?

Regards,
 Colin

After shooting this video and showing how you can use Argument validators for limiting the view to a specific user, I forgot to mention that the default and best method for making a View focus on user specific content is to use the "Current User" option under Users when choosing Filters.

You'll also want to set the option of "Empty text" under the Basic Settings area. This allows you to provide a default response when nothing is found as a result of an empty query.

Hope that helps out.

Thanks so much for taking the trouble to make this video! It's gold dust - there are so few sources of clear information about view arguments anywhere on the web and this one is the best. It cleared up the mystery for me after an impasse lasting 3 days. I owe you.

I do have one question related to this. In the video you talk about avoiding path collisions because the vagaries of drupal's menu system mean that the views url will count for nothing. But what about in cases where it's unavoidable? Is there any solution?

I'm thinking in particular of overriding the taxonomy/term path. The bundled view built for this doesn't do it. In my case I am trying to use views to replace drupal's blog. I know it is possible and have seen good examples (the one at James Walker's walkah blog is perfect - although he uses a static argument in the way you recommend) but the views I've created that clash with any pathauto url disappear in the collision as predicted. I haven't been able to figure out how to abandon the default taxonomy/term display (to list the blog categories), and create a new one in views, with an extra static argument, that preserves the nice pathauto hyphenated urls or taxonomy terms with spaces (for me, spaces in taxonomy terms are converted to %20 when being output as a link! & I really don't want to have to hyphenate my taxonomy terms!). So it's a brick wall and the desperate question: is there anyway to force the menu system to prioritise the views path for taxonomy/term/%?

Unfortunately, to the best of my current knowledge, the menu system is somewhat flat and you can't override a menu which has been established by a module (whether core or contrib).

You can only redirect these to another url.

The menu is built and cached in a table named menu_router (for the technically interested). When the menu is built (and it does get rebuilt when new menus are added or adjusted), I would have to guess there are few circumstances when duplicates are created - if ever.

It's sort of like domain names, you can only have one, otherwise the Internet would be seriously confused. Whichever module "claims" a certain path, it sort of has first rights to it. It will actually be quite interesting in the next couple of years when the number of modules is just crazy huge. Overlap is likely already happening due to ignorance and the lack of a formal registry (which would likely have political issues)

So, if we take this perspective, the one thing we can do is point one of the default menus somewhere else.

My suggestion would be the following. Use the Path Redirect module and redirect any of the taxonomy paths to wherever you wish. The word "taxonomy" doesn't mean much to your average user anyway because, in my opinion, it's too close to taxidermy - "taxonomy?... what is that?... where they stuff animals?" <grin>

You can also try Taxonomy Redirect, although I've only used Path Redirect myself.

  • it will be interesting to see what happens with the landgrab of paths and how drupal resolves it.

I've been toying with the path redirect module and it almost gets me there - so close. But the problem I've found is that it doesn't take placeholders for arguments, so needs a redirect for every term to work, which is a tiny bit too much work.

The solution I've found is inelegant - but straightforward. I've set up a panel to take control of the taxonomy/term - and that has done the trick. It's not quite what I had in mind - the views are rendering the blog, but panels is a lot of extra weight for the site . Such a huge module - and I'm not using it for anything else. The same developer is behind both modules, so with any luck whatever magic is in panels to bring this about may spill over into views in time.

Thanks again - and I look forward to all your future videos. Drupal is richer for this site.