【问题标题】:Changing menu links, if user is authenticated or not更改菜单链接(如果用户已通过身份验证)
【发布时间】:2010-07-13 12:33:19
【问题描述】:

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

标准的做法是什么?

谢谢

【问题讨论】:

    标签: drupal drupal-6


    【解决方案1】:

    您不能动态更改菜单项的路径,因为菜单项已缓存。

    不过,AFAIK,有两种方法可以得到你想要的。这两种方法都要求您在自定义模块(而不是从菜单 UI)中使用 hook_menu 创建菜单项。

    第一种方法是创建两个具有相同名称的菜单项并设置访问规则,以便一个仅对登录的客人可用,另一个对经过身份验证的用户可用。由于 Drupal 只会显示允许用户访问的菜单项,因此在任何给定时刻只会显示一个。在 Drupal 核心中,您可以通过查看 user_menu() 中的 /user/login 路径来了解用户模块如何为匿名用户创建菜单项。

    第二种方法是创建一个菜单项并在用户登录时检查菜单回调。如果用户已登录,则提供一个页面,否则提供另一个页面。在 Drupal 核心中,/user 路径是这样工作的。请参阅user_page 了解代码的工作原理。

    【讨论】:

    • 我实际上是通过将用户重定向到正确的页面而不涉及菜单来解决的。
    • 很高兴看到您已经解决了它,但如果我问:您将访问者重定向到正确 url 的代码放在哪里?如果您将 PHP 放在节点中,我想向您展示这篇文章 (2bits.com/articles/…),因为该技术存在一些缺点。
    • 使用 PHP 输入格式创建节点只能用作临时解决方案。即使在 Drupal.org 上,所有需要动态输出的页面都是由自定义模块 (drupalorg.module) 生成的,该模块包含 Drupal.org 所需的所有自定义。
    【解决方案2】:

    可以动态更改菜单项的路径 - 请参阅 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';
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以创建两次菜单,而不是更改链接:一次使用普通用户的链接,一次使用注册/管理员/...用户的链接

      您可以将菜单放入一个块中,并将其设置为只允许注册用户看到一个块,而非注册用户看到另一个块。通过从块创建表单中的 Drupal 菜单中选择适当的单选按钮,或者通过 PHP 将评估并根据它的返回值 (TRUE/FALSE) 显示它。我建议采用第一种方法。

      【讨论】:

        【解决方案4】:

        您可以通过使用 nodeaccess 模块和链接到相应页面的组合来更改菜单。

        例如,默认情况下来宾用户无法访问 /logout。如果您在菜单中创建一个链接以注销,它将仅在用户登录时显示。使用 nodeaccess,只需创建一个节点,访问授权选项卡并取消选中/选中该节点的“经过身份验证的用户”或“匿名用户” .

        http://drupal.org/project/nodeaccess

        干杯,

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-08
          • 2017-04-09
          • 1970-01-01
          相关资源
          最近更新 更多