如何编写一个块挂钩,根据当前URL呈现自定义菜单,并应用活动路径?我不能使用常规菜单,因为它们是缓存的。对于自定义,我指的是不同用户的不同菜单项。
在查看用户X的个人资料
时,示例菜单可能如下所示|-- User X's profile (active)
|-- User X's groups
|-- Group A
|-- Group B
|-- Group C
但如果我浏览到我自己的用户个人资料,请转到设置,菜单可能如下所示
|-- My profile
|-- My settings
|-- Profile settings (active)
|-- Group settings
|-- My groups
|-- Group X
|-- Group Y
|-- Group Z
创建一个以纯HTML格式输出的块非常容易。但如上所述,我需要在链接上应用主动跟踪。而且我也只想编辑来自不同菜单钩子的路线,而不是硬编码或任何类似的东西。
有什么建议吗?
答案 0 :(得分:0)
我不记得我从哪里偷了这个,但是如果你调用'your_module_menu_tree_full()',你会得到一个命名菜单作为一个带有活动项注释的数组树。
function your_module_menu_tree_full($menu_name = 'main-menu') {
static $menu_output = array();
if (!isset($menu_output[$menu_name])) {
$tree = _your_module__menu_find_active_trail(menu_tree_all_data($menu_name));
$menu_output[$menu_name] = menu_tree_output($tree);
}
return $menu_output[$menu_name];
}
function _your_module__menu_find_active_trail(&$menu_tree) {
$item = menu_get_item();
_your_module_menu_find_active_trail($menu_tree, $item);
return $menu_tree;
}
function _your_module_menu_find_active_trail(&$menu_tree, $item) {
$level_is_expanded = FALSE;
foreach($menu_tree as &$menu_item) {
$link = &$menu_item['link'];
if ($link['href']==$item['href']) { // Found the exact location in the tree
$link['active'] = TRUE;
$link['in_active_trail'] = TRUE;
return true;
} else {
if ($link['has_children']) {
$result = _your_module_menu_find_active_trail($menu_item['below'], $item);
$link['in_active_trail'] = $result;
if ($result) $level_is_expanded = TRUE;
}
}
}
return $level_is_expanded;
}
尝试:
$menu = your_module_menu_tree_full('main-menu');
error_log(print_r($menu, TRUE));