我希望有条件地向菜单中添加一项。我有一个自定义模块和一个叫做“链接”的菜单。如何在模块代码中将菜单项添加到菜单中?
发布于 2010-12-16 21:16:38
菜单系统是缓存的,所以你不能根据用户、查看的页面、自定义逻辑等随意添加或删除菜单项。也就是说,如果不清除菜单缓存,就不能添加或删除菜单项,这将导致严重的性能影响。
要创建此效果,您可以创建一些自定义逻辑来定义菜单项上的访问控制。由于Drupal隐藏了用户无权访问的菜单项,因此在某些情况下可以拒绝隐藏菜单项的权限。这是一个有点老土的解决方案。
另一个解决方案,我更喜欢,将使用js或css来隐藏或显示菜单。您可以在主体上动态添加/删除一个类,以确定是否应该显示菜单项。但是,如果您需要几个这样的菜单项,这将很快变得无法管理。
发布于 2010-12-16 20:39:26
您需要在模块中实现hook_menu。示例:
<?php
function mymodule_menu() {
$items['mymodule/links'] = array(
'title' => 'Links',
'page callback' => 'mymodule_links_page',
'access arguments' => array('access content'),
'type' => MENU_SUGGESTED_ITEM,
);
return $items;
}
?>'type' => MENU_SUGGESTED_ITEM,部件使其成为可选的,因此它可以由最终用户启用-这就是您所说的“有条件地”的意思吗?如果没有,请解释一下你在寻找什么样的“有条件的”。
发布于 2011-09-21 03:02:17
或者,您可以使用'type' => MENU_NORMAL_ITEM,,因为它在默认情况下处于启用状态,但可以随时禁用。当然,这取决于您的偏好。有关更多参考信息,请参阅http://api.drupal.org/api/drupal/includes--menu.inc/group/menu/7。
在自定义菜单中使用模块定义的菜单项时需要知道的另一件事是,如何以编程方式创建要使用的菜单,以便所有内容都是“开箱即用”的。只需添加一个mymodule.install-file,您就可以在其中放置以下代码:
<?php
function mymodule_install() {
$menu = array(
'menu_name' => 'links',
'title' => 'My Custom Links',
'description' => 'Descriptive text.',
);
menu_save($menu);
}
?>如果你有一个卸载功能,不要忘记不仅要停用模块,还要卸载它。重新启用模块,刷新缓存,菜单项应该在那里!
https://stackoverflow.com/questions/4460562
复制相似问题