【发布时间】:2010-07-13 12:33:19
【问题描述】:
我需要更改我网站上的菜单链接(并保留相同的项目名称),具体取决于用户是访客还是经过身份验证的用户。
标准的做法是什么?
谢谢
【问题讨论】:
我需要更改我网站上的菜单链接(并保留相同的项目名称),具体取决于用户是访客还是经过身份验证的用户。
标准的做法是什么?
谢谢
【问题讨论】:
您不能动态更改菜单项的路径,因为菜单项已缓存。
不过,AFAIK,有两种方法可以得到你想要的。这两种方法都要求您在自定义模块(而不是从菜单 UI)中使用 hook_menu 创建菜单项。
第一种方法是创建两个具有相同名称的菜单项并设置访问规则,以便一个仅对登录的客人可用,另一个对经过身份验证的用户可用。由于 Drupal 只会显示允许用户访问的菜单项,因此在任何给定时刻只会显示一个。在 Drupal 核心中,您可以通过查看 user_menu() 中的 /user/login 路径来了解用户模块如何为匿名用户创建菜单项。
第二种方法是创建一个菜单项并在用户登录时检查菜单回调。如果用户已登录,则提供一个页面,否则提供另一个页面。在 Drupal 核心中,/user 路径是这样工作的。请参阅user_page 了解代码的工作原理。
【讨论】:
您可以动态更改菜单项的路径 - 请参阅 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';
}
}
【讨论】:
您可以创建两次菜单,而不是更改链接:一次使用普通用户的链接,一次使用注册/管理员/...用户的链接
您可以将菜单放入一个块中,并将其设置为只允许注册用户看到一个块,而非注册用户看到另一个块。通过从块创建表单中的 Drupal 菜单中选择适当的单选按钮,或者通过 PHP 将评估并根据它的返回值 (TRUE/FALSE) 显示它。我建议采用第一种方法。
【讨论】:
您可以通过使用 nodeaccess 模块和链接到相应页面的组合来更改菜单。
例如,默认情况下来宾用户无法访问 /logout。如果您在菜单中创建一个链接以注销,它将仅在用户登录时显示。使用 nodeaccess,只需创建一个节点,访问授权选项卡并取消选中/选中该节点的“经过身份验证的用户”或“匿名用户” .
http://drupal.org/project/nodeaccess
干杯,
【讨论】: