我需要更改网站上的菜单链接(并保留相同的项目名称),具体取决于用户是来宾还是经过身份验证的用户。
这样做的标准方法是什么?
感谢
答案 0 :(得分:5)
您无法动态更改菜单项的路径,因为菜单项已缓存。
仍然,AFAIK,有两种方法可以得到你想要的东西。这两种方法都要求您在自定义模块中使用hook_menu创建菜单项(而不是从菜单UI)。
第一种方法是创建两个名称相同的菜单项,并设置访问规则,使其中一个仅适用于已记录的guest虚拟机,另一个仅适用于经过身份验证的用户。由于Drupal仅显示允许用户访问的菜单项,因此在任何给定时刻只会显示一个菜单项。在Drupal核心中,您可以通过查看user_menu()中的/user/login
路径来查看用户模块如何为匿名用户创建菜单项。
第二种方法是创建单个菜单项并在用户登录时检查菜单回调。如果用户已登录,则提供一个页面,如果不是,则提供另一个页面。在Drupal核心中,/user
路径就像这样工作。请参阅user_page以查看代码的工作原理。
答案 1 :(得分:4)
您可以动态更改菜单项的路径 - 请参阅hook_translated_menu_link_alter。
如果它具有属性[' options'] [' alter'] = TRUE,则在每个菜单项呈现之前调用此挂钩。
您可以使用hook_menu_link_alter将此属性设置为菜单项。
示例代码为:
function MY_MODULE_menu_link_alter(&$item) {
$item['options']['alter'] = TRUE;
}
function MY_MODULE_translated_menu_link_alter(&$item, $map) {
if($item['mlid']==89) {
$item['link_path'] .= 'my-new-path';
}
}
答案 2 :(得分:2)
而不是改变链接,你可以创建两次菜单:一次是普通用户的链接,另一次是注册/管理/用户的链接
您可以将菜单放入块中,并将其设置为仅允许注册用户查看一个块,将非注册用户设置为另一个块。通过从块创建表单中的Drupal菜单中选择正确的单选按钮,或者通过PHP进行评估,并根据它的返回值(TRUE / FALSE)显示它。我建议采用第一种方法。
答案 3 :(得分:0)
您可以使用nodeaccess模块的组合并链接到相应的页面来更改菜单。
例如,默认情况下,访客用户无法访问/注销。如果在菜单中创建一个用于注销的链接,它将仅在用户登录时显示。使用nodeaccess,只需创建一个节点,访问grant选项卡并取消选中/选中该节点的“authenticated users”或“anonymous users”
http://drupal.org/project/nodeaccess
干杯,