Tertiary links / 2: tree workaround

On Tertiary links onĀ Drupal I described a simple approach to display the “tertiary” menu (childrens of secondary menus) on Drupal 5.x. This is an useful but sometimes limiting approach, since the secondary menu disappears when tertiary menu is displayed.

This is an alternative workaround made using a customized menu_tree function:

template.php:

function custom_menu_tree_secondary($pid = 1) {
  $menu = menu_get_menu();
  $output = '';

  if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
    foreach ($menu['visible'][$pid]['children'] as $mid) {
      $type = isset($menu['visible'][$mid]['type'])
? $menu['visible'][$mid]['type'] : NULL;
      $children = isset($menu['visible'][$mid]['children'])
? $menu['visible'][$mid]['children'] : NULL;
      # display only the children menu of the current menu
      if(menu_in_active_trail($mid)) {
      	$output .= theme('menu_tree', $mid);
      }
    }
  }
  return $output;
}

page.tpl.php (in place of standard $secondary block):

<div id="secondary">
<?php if ($secondary_links): ?>
<?php echo tools_menu_tree_secondary(variable_get('menu_primary_menu', 0));?>
<?php endif; ?>
</div>

Tested on:

  • Drupal 5.x
  • Zen subtheme

		
Advertisements

Tertiary links on Drupal

Update: check Tertiary links / 2: treeĀ workaround before this. That’s a wiser solution in many cases.

Tested on:

  • Drupal 5.x
  • Zen subtheme

If you use primary and secondary links in distinct blocks/area of a page, you can add the ability to browse the third navigation level. Just hack your page.tpl.php.


<div id="secondary">
<?php
#display tertiary links menu on 2nd level
$tertiary_links=menu_primary_links(3, variable_get('menu_primary_menu', 0) );
#display secondary links menu on 1st level
if($my_secondary_links):?>
<?php
print theme('links', $my_secondary_links, array('class' => 'links tertiary-links'));
?>
elseif ($secondary_links): ?>
<?php
print theme('links', $secondary_links);
?>
</div> <!-- /#secondary -->
<?php endif; ?>

See also: