You are here

function _menu_get_active_trail_in_submenu in Drupal 4

Same name and namespace in other branches
  1. 5 includes/menu.inc \_menu_get_active_trail_in_submenu()

Find the active trail through a specific subsection of the menu tree.

Parameters

$pid: The root item from which the active trail must descend.

2 calls to _menu_get_active_trail_in_submenu()
menu_in_active_trail_in_submenu in includes/menu.inc
Returns true when the menu item is in the active trail within a specific subsection of the menu tree.
menu_primary_links in includes/menu.inc
Returns an array containing the primary links. Can optionally descend from the root of the Primary links menu towards the current node for a specified number of levels and return that submenu. Used to generate a primary/secondary menu from different…

File

includes/menu.inc, line 948
API for the Drupal menu system.

Code

function _menu_get_active_trail_in_submenu($pid) {
  static $trails;
  if (!isset($trails)) {

    // Find all menu items which point to the current node and for each
    // follow the parents up the chain to build an active trail.
    $trails = array();
    $menu = menu_get_menu();
    $path = $_GET['q'];
    $count = 0;
    while ($path && !$count) {
      foreach ($menu['items'] as $key => $item) {
        if (isset($item['path']) && $item['path'] == $path) {
          $trails[$count] = array();
          $mid = $key;
          while ($mid && $menu['items'][$mid]) {
            array_unshift($trails[$count], $mid);
            $mid = $menu['items'][$mid]['pid'];
          }
          $count++;
        }
      }
      $path = substr($path, 0, strrpos($path, '/'));
    }
  }
  if ($trails) {
    foreach ($trails as $trail) {
      $count_trail = count($trail);
      for ($i = 0; $i < $count_trail; $i++) {
        if ($trail[$i] == $pid) {

          // Return a trail from $pid down to the current page inclusive.
          for (; $i < $count_trail; $i++) {
            $subtrail[] = $trail[$i];
          }
          return $subtrail;
        }
      }
    }
  }
  return NULL;
}