function menu_CrumbsMultiPlugin_hierarchy::findParent in Crumbs, the Breadcrumbs suite 7.2
Same name and namespace in other branches
- 7 plugins/crumbs.menu.inc \menu_CrumbsMultiPlugin_hierarchy::findParent()
Find candidates for the parent path.
Parameters
string $path: The path that we want to find a parent for.
array $item: Item as returned from crumbs_get_router_item()
Return value
array Parent path candidates
Overrides crumbs_MultiPlugin_FindParentInterface::findParent
File
- plugins/
crumbs.menu.inc, line 53
Class
Code
function findParent($path, $item) {
// Support for special_menu_items module.
/* @see crumbs_menu() */
/* @see menu_link_load() */
if ('crumbs/special-menu-item/%' === $item['route']) {
return $this
->specialMenuItemFindParent($item);
}
$q = db_select('menu_links', 'child');
// Join the parent item, but allow for toplevel items without a parent.
$q
->leftJoin('menu_links', 'parent', 'parent.mlid = child.plid');
$q
->addExpression('parent.link_path', 'parent_path');
$q
->addExpression('child.menu_name', 'menu_name');
$q
->addExpression('child.plid', 'plid');
$q
->condition('child.link_path', $path);
if (module_exists('i18n_menu')) {
// Filter and sort by language.
// The 'language' column only exists if i18n_menu is installed.
// (See i18n_menu_install())
$language = LANGUAGE_NONE;
if (isset($GLOBALS['language'])) {
$language = array(
$language,
$GLOBALS['language']->language,
);
}
$q
->condition('child.language', $language);
}
// Top-level links have higher priority.
$q
->orderBy('child.depth', 'ASC');
// Collect candidates for the parent path, keyed by menu name.
$candidates = array();
foreach ($q
->execute() as $row) {
if (!array_key_exists($row->menu_name, $candidates)) {
if ('<separator>' === $row->parent_path) {
// Ignore separator menu items added by special_menu_items.
continue;
}
if ('<nolink>' === $row->parent_path) {
$candidates[$row->menu_name] = 'crumbs/special-menu-item/' . $row->plid;
}
else {
// This may add NULL values for toplevel items.
$candidates[$row->menu_name] = $row->parent_path;
}
}
}
// Filter out NULL values for toplevel items.
return array_filter($candidates);
}