首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Drupal以编程方式向菜单添加项目

Drupal以编程方式向菜单添加项目
EN

Stack Overflow用户
提问于 2010-12-16 20:04:48
回答 5查看 12.3K关注 0票数 3

我希望有条件地向菜单中添加一项。我有一个自定义模块和一个叫做“链接”的菜单。如何在模块代码中将菜单项添加到菜单中?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-16 21:16:38

菜单系统是缓存的,所以你不能根据用户、查看的页面、自定义逻辑等随意添加或删除菜单项。也就是说,如果不清除菜单缓存,就不能添加或删除菜单项,这将导致严重的性能影响。

要创建此效果,您可以创建一些自定义逻辑来定义菜单项上的访问控制。由于Drupal隐藏了用户无权访问的菜单项,因此在某些情况下可以拒绝隐藏菜单项的权限。这是一个有点老土的解决方案。

另一个解决方案,我更喜欢,将使用js或css来隐藏或显示菜单。您可以在主体上动态添加/删除一个类,以确定是否应该显示菜单项。但是,如果您需要几个这样的菜单项,这将很快变得无法管理。

票数 1
EN

Stack Overflow用户

发布于 2010-12-16 20:39:26

您需要在模块中实现hook_menu。示例:

代码语言:javascript
复制
<?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,部件使其成为可选的,因此它可以由最终用户启用-这就是您所说的“有条件地”的意思吗?如果没有,请解释一下你在寻找什么样的“有条件的”。

票数 3
EN

Stack Overflow用户

发布于 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,您就可以在其中放置以下代码:

代码语言:javascript
复制
<?php  
function mymodule_install() {  
  $menu = array(  
    'menu_name' => 'links',  
    'title' => 'My Custom Links',  
    'description' => 'Descriptive text.',  
  );  
  menu_save($menu);  
}  
?>

如果你有一个卸载功能,不要忘记不仅要停用模块,还要卸载它。重新启用模块,刷新缓存,菜单项应该在那里!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4460562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档