You are here

function ctools_get_menu_trail in Chaos Tool Suite (ctools) 6

CTools replacement for menu_get_menu_trail that allows us to take apart the menu trail if necessary.

4 calls to ctools_get_menu_trail()
ctools_export_ui::clone_page in plugins/export_ui/ctools_export_ui.class.php
Main entry point to clone an item.
ctools_menu_set_trail_parent in includes/menu.inc
page_manager_search_page in page_manager/plugins/tasks/search.inc
Entry point for our overridden node view.
page_manager_search_view in page_manager/plugins/tasks/search.inc
Replacement function for normal search view.

File

includes/menu.inc, line 55
General menu helper functions.

Code

function ctools_get_menu_trail($path = NULL) {
  $trail = array();
  $trail[] = array(
    'title' => t('Home'),
    'href' => '<front>',
    'localized_options' => array(),
    'type' => 0,
  );
  $item = menu_get_item($path);

  // Check whether the current item is a local task (displayed as a tab).
  if ($item['tab_parent']) {

    // The title of a local task is used for the tab, never the page title.
    // Thus, replace it with the item corresponding to the root path to get
    // the relevant href and title.  For example, the menu item corresponding
    // to 'admin' is used when on the 'By module' tab at 'admin/by-module'.
    $parts = explode('/', $item['tab_root']);
    $args = arg();

    // Replace wildcards in the root path using the current path.
    foreach ($parts as $index => $part) {
      if ($part == '%') {
        $parts[$index] = $args[$index];
      }
    }

    // Retrieve the menu item using the root path after wildcard replacement.
    $root_item = menu_get_item(implode('/', $parts));
    if ($root_item && $root_item['access']) {
      $item = $root_item;
    }
  }
  $tree = ctools_menu_tree_page_data($item, menu_get_active_menu_name());
  list($key, $curr) = each($tree);
  while ($curr) {

    // Terminate the loop when we find the current path in the active trail.
    if ($curr['link']['href'] == $item['href']) {
      $trail[] = $curr['link'];
      $curr = FALSE;
    }
    else {

      // Add the link if it's in the active trail, then move to the link below.
      if ($curr['link']['in_active_trail']) {
        $trail[] = $curr['link'];
        $tree = $curr['below'] ? $curr['below'] : array();
      }
      list($key, $curr) = each($tree);
    }
  }

  // Make sure the current page is in the trail (needed for the page title),
  // but exclude tabs and the front page.
  $last = count($trail) - 1;
  if ($trail[$last]['href'] != $item['href'] && !(bool) ($item['type'] & MENU_IS_LOCAL_TASK) && !drupal_is_front_page()) {
    $trail[] = $item;
  }
  return $trail;
}