[development] menu_navigation_links: bug or feature?

Matt Chapman matt at ninjitsuweb.com
Tue Jun 8 19:18:37 UTC 2010


Hey all,

I'm running into an issue in Drupal 6 and want to see if anyone else
had experienced this before I dive too deep. Maybe it's a known issue.

I'm using the following in my template.php to generate a third-level
navigation menu:

<?php

    $subpage_links = menu_navigation_links('primary-links',2);
    $vars['subpage_nav'] = theme('links', $subpage_links);
?>

This works great in most cases, for example, when the menu tree looks like;

node/1
|---node/2
|-------path/to/a
|-------path/to/b
|---node/5

So on node/2, I see links for 'a' and 'b'.

But sometimes the 'landing page' for a section IS the first node in
the section, for example:
node/1
|---node/1
|-------path/to/a
|-------path/to/b
|---node/4

Notice node/1 appears twice in this tree, but in this case, the
sub-items for node/1 do not get rendered.


The problem is that menu_navigation_links() calls menu_tree_get_data()
which does not ask for the appropriate menu item, but instead uses
menu_get_item() and it's own logic (SQL queries) to decide which menu
item to look at, and it does so incorrectly.

I'm at a loss how to proceed... There is an evil hack that works:
replace the top level node/1 with a new php-filter node that does a
drupal_goto('node/1').Yuck.

My other option seems to be to write a custom replacement for
menu_navigation_link() that does the work of menu_tree_get_data() in a
way that works here, but that feels equally wrong.

I'm not even sure if this is a bug I should report, or just an
inherent limitation of the menu system that can't be resolved until we
get a real context system in core.

Any insight?

All the Best,

Matt


More information about the development mailing list