如果用户已通过身份验证,则更改菜单链接

时间:2010-07-13 12:33:20

标签: drupal drupal-6

我需要更改网站上的菜单链接(并保留相同的项目名称),具体取决于用户是来宾还是经过身份验证的用户。

这样做的标准方法是什么?

感谢

4 个答案:

答案 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

干杯,

相关问题