[英]How to get all the menu items below a certain parent in drupal 7?
我目前正在开发一个模块,该模块通过url路径查找父菜单项,然后通过查找顶级父项来显示该相关菜单的当前树结构,最重要的是仅从该菜单中显示该菜单项和子菜单。
一个简单的解决方案是通过所有项或以所有项为键的数组进行foreach循环。
path = '/system/menu/submenu';
parent = 'system';
output = parent + parent submenus.
“自定义菜单”中的所有菜单项:
- System
- Menu wrapper
- SubMenu 1A
- SubMenu 2A
- SubMenu 3A
- Main
- SubMenu 1B
- SubMenu 2B
- SubChildMenu 3B
PHP代码应返回以下代码:
- System
- Menu wrapper
- SubMenu 1A
- SubMenu 2A
- SubMenu 3A
我的代码(当前无法正常工作):
$menu = menu_tree('my-custom-menu');
return = theme('my_custom_menu', array('system' => $menu_tree));
注意:这仅是php代码和php代码,所有其他模块仅通过手动选择不支持此功能。 内容通过块显示。
“对于导航,Drupal将通过menu_navigation_links调用menu_tree_page_data ,这只会返回单个级别的链接。您可以在此函数之前跟随menu_main_menu,然后在其之前进行template_preprocess_page(这就是它在page.tpl.php中最终作为变量的方式。 )
但是,如果您将菜单插入为块,则menu_tree会调用menu_tree_page_data (它会立即调用menu_tree_output ,之后会对数组进行最终标记以做一些额外的工作。)在两者都运行之后,您可以将整个菜单树用作数组然后,我遍历了一些自定义的PHP代码以遍历数组并将其呈现为HTML列表。”
人们以前曾问过这个问题,但是我尝试过他们的解决方案,没有成功的可能原因是drupal 6的问题。我目前正在使用drupal 7。
非常感谢您的帮助,谢谢...
相关问题:
https://drupal.stackexchange.com/questions/30112/displaying-a-menus-child-links
您需要做的第一件事是当前页面的状态:
$q = variable_get('site_frontpage', 'node') == $_GET["q"] ? '<front>' : $_GET["q"];
$current_menu_item = db_select('menu_links' , 'ml')
->condition('ml.link_path' , $q)
->fields('ml', array('mlid', 'plid'))
->execute()
->fetchAll();
现在,如果此菜单项的plid为0,那么我们知道它是顶级菜单项,如果它不是0,则需要获取父项。 因此,我们要获取的树的最上层是:
$top_level_mlid = $current_menu_item->plid == 0 ? $current_menu_item->mlid : $current_menu_item->plid;
然后,您需要加载完整菜单:
$full_menu_items = menu_tree_all_data('main-menu');
现在循环遍历所有菜单项,然后得到我们想要的位:
foreach($full_menu_items as $menu_item) {
if($menu_item['link']['mlid'] == $top_level_mlid) {
$links = $menu_item['below'];
break;
}
}
现在,$ links包含菜单中特定部分的所有链接。
并将该数组作为菜单输出到页面上:
echo theme('links__system_secondary_menu', array(
'links' => $links,
'attributes' => array(
'id' => 'secondary-menu',
'class' => array('links', 'clearfix')),
'heading' => array(
'text' => t('Secondary menu'),
'level' => 'h2',
'class' => array('element-invisible')
)
));
这样的事情怎么样?
function your_module_menu_link__your_menu($variables){
$element = $variables['element'];
$sub_menu = '';
if ($element['#below']) {
$sub_menu = drupal_render($element['#below']);
}
$ouput = "";
if($element['#original_link']['plid'] > 0 || $element['#below']){
$link = l($element['#title'], $element['#href'], $element['#localized_options']);
$ouput = '<li' . drupal_attributes($element['#attributes']) . '>' . $link . $sub_menu . "</li>\n";
}
return $ouput;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.