我正在使用Drupal 7在现场工作,并且有面板打印当前页面的相对菜单。例如,我的菜单如下所示:
MENU PRIMARY
-SUBMENU
--LINK 1
--LINK 2
---sublink 1
---sublink 2
--LINK 3
当我在节点sublink 1
菜单上显示:
LINK 2
--sublink 1 (active)
--sublink 2
问题是我输入的例子LINK 3
没有孩子,菜单只显示当前节点的标题
LINK 3
在这种情况下,我想显示当前页面的所有相关链接,所以它应该如下所示:
LINK 1
LINK 2
LINK 3 (active)
我不知道如何检查并打印正确的菜单。 这是我处理这个问题的函数:
function mysite_relative_main_menu() {
$menu_name = variable_get('menu_main_links_source', 'main-menu');
$parents = menu_get_active_trail();
array_shift($parents);
$expanded_parents = array_filter($parents, function($item){
return !@$item["expanded"];
});
if (count($expanded_parents) > 1) {
array_shift($expanded_parents);
}
$parent = current($expanded_parents);
if (!$parent) {
return NULL;
}
$main_tree = menu_tree_all_data($menu_name, NULL, NULL);
$flat_tree = $main_tree;
$walk_over_trees = function($tree) use(&$flat_tree, &$walk_over_trees) {
foreach ($tree as $data) {
foreach ($data["below"] as $tree) {
$flat_tree[] = $tree;
if ($tree["below"]) {
call_user_func_array($walk_over_trees, [[$tree]]);
}
}
}
};
call_user_func_array($walk_over_trees, [$main_tree]);
$subtree = [current(array_filter($flat_tree, function($data) use($parent) {
return $data["link"]["link_path"] == $parent["link_path"];
}))];
$tree_output_prepare = menu_tree_output($subtree);
$list = drupal_render($tree_output_prepare);
$list = substr_replace($list, "<ul class=\"nav navbar-nav\"", strpos($list, "<ul "), 3);
return $list;
}
如果有任何建议,我将不胜感激:)