Dan*_*ton 3 drupal module menu submenu
在为模块实现hook_menu时,我试图将一些项目放入子菜单中.
到目前为止,我有类似的东西
$items['MyModule'] = array(
//...
'page callback' => 'system_admin_menu_block_page',
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module','system'),
);
$items['MyModule/MenuItem1'] = array(
//...
);
$items['MyModule/SubMenu'] = array(
//...
'page callback' => 'system_admin_menu_block_page',
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module','system'),
);
$items['MyModule/SubMenu/SubMenuItem1'] = array(
//...
);
Run Code Online (Sandbox Code Playgroud)
我希望它SubMenu显示为菜单的子MyModule菜单,并SubMenuItems显示在该子菜单下.这是Drupal API文档中描述的默认行为.
但是,所有项目都显示在MyModule菜单下.
我究竟做错了什么?
*编辑:一个错字(我已修复)导致SubMenu是一个单独的元素而不是一个子元素MyModule.不过,我仍然不明白为什么SubMenuItem1不渲染下SubMenu.
我无法重现您的问题 - 使用菜单层次结构,所有条目都按预期顺序显示在导航菜单下并嵌套.
您是否(从重新)尝试过干净状态(即卸载了模块并且菜单项已经消失)?为了解释我为什么这么问,我必须详细说明一下:
Drupal 6将菜单定义存储分成两个表.有menu_router表,它存储通过定义的路径<>回调关系hook_menu().这不会定义任何"真实"菜单条目(如菜单菜单,例如导航菜单).它只定义Drupal内部菜单结构,它与显示的菜单无关,但只与回调函数的映射路径的内部层次结构有关!
然后是menu_links表格,其存储在各种可显示菜单(例如导航,主链接等)下出现的"真实"菜单条目.那里的条目还通过为每个条目存储"父菜单id"(plid),指向父条目,或者为顶级条目存储0来定义嵌套顺序.
现在每当你定义路径/回调组合时hook_menu(),Drupal只是将该条目放入menu_router表中.如果将它们定义为MENU_NORMAL_ITEM或MENU_SUGGESTED_ITEM,Drupal将另外尝试在menu_links表中创建一个条目.如果该路径的条目已存在,Drupal将不会更改其在层次结构中的位置,因为它假定用户故意移动它.您应该考虑menu_link创建这个条目hook_menu()作为一个方便的添加,可以省去通过下面提到的功能明确添加它们的麻烦,但机制不是很灵活,并试图不干扰现有配置(否则手动编辑菜单将不断重新排序菜单缓存的每次重建).
因此,您应该再次尝试,同时确保您的路径中没有任何路径在`menu_links'表中有现有条目.
为了您在安装模块时提供正确的默认菜单(以及更多地控制发生的事情),您应该查看menu_link_save()和menu_link_maintain()功能.您可能还想阅读何时以及如何使用menu_links.
| 归档时间: |
|
| 查看次数: |
5296 次 |
| 最近记录: |