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;
}