回答
不能动态更改菜单项的路径,因为菜单项缓存。
还有,AFAIK,有两种方法可以得到你想要的。这两种方法都要求您在自定义模块中(而不是从菜单UI)使用hook_menu创建菜单项。
第一种方法是创建两个具有相同名称的菜单项并设置访问规则,以便一个仅可用于已登录的guest,另一个用于已认证的用户。由于Drupal只会显示允许用户访问的菜单项,因此在任何给定时刻只有一个菜单项会显示。在Drupal核心中,通过查看user_menu()中的/user/login
路径,您可以看到用户模块如何为匿名用户创建菜单项。
第二种方法是创建单个菜单项并在用户登录时检查菜单回调。如果用户已登录,则您提供一页,如果不提供另一页。在Drupal核心中,/user
路径就像这样工作。请参阅user_page以查看代码的工作方式。
而是改变链接的,你coudl创建menues两次:一次为普通用户,并曾经与已注册/管理链接的链接/ ...用户
你可以把菜单成块并将其设置为仅允许注册用户看到一个块和未注册用户的另一个块。无论是从块创建表单中的Drupal菜单中选择合适的单选按钮,还是通过PHP来评估并根据返回值(TRUE/FALSE)来显示它。我建议采用第一种方法。
您可以使用nodeaccess模块的组合并链接到相应的页面来更改菜单。
例如,默认来宾用户不能访问/注销。如果您在菜单中创建了一个注销链接,则只有在用户登录后才会显示。使用nodeaccess时,只需创建一个节点,访问授权标签并取消选中该节点的“已验证用户”或“匿名用户” 。
http://drupal.org/project/nodeaccess
干杯,
您可以动态更改菜单项的路径 - 见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';
}
}
- 1. 离子侧菜单 - 显示基于用户是否通过验证的链接
- 2. 验证通过Oauth验证的用户
- 3. 通过电子邮件验证链接
- 4. Rails:通过链接更新用户
- 5. 验证用户通过URL
- 6. 通过wcf验证用户
- 7. 如果用户通过身份验证,绕过nginx缓存Django
- 8. Sharepoint:通过表单身份验证来验证用户
- 9. 通过REST API验证/更改密码
- 10. jQuery通过AJAX更改下拉菜单
- 11. Webshims:通过点击链接提交时验证表单
- 12. 如何通过链接文本更改链接href
- 13. 如何一旦用户通过验证
- 14. 通过表单更改用户角色
- 15. 在symfony2中通过电子邮件链接验证用户帐户
- 16. asp.net菜单跳过链接
- 17. DNN 2sxc剃刀模板 - 如果用户通过验证
- 18. 默认操作,如果用户通过身份验证 - asp mvc
- 19. 通过jQuery更改CSS链接的href
- 20. 通过jquery动作后更改链接
- 21. 如何通过已验证的连接验证LDAP用户名和密码?
- 22. WCF证书链,通过编程验证
- 23. 如何更改drupal8用户登录表单输入和验证?
- 24. 如何更改allauth中的电子邮件验证链接
- 25. 表单验证通过Ajax
- 26. 如何在下载链接中通过身份验证?
- 27. 根据用户是否通过验证隐藏或显示链接 - AngularJs
- 28. 如何通过链接发送邮件给新注册用户更改密码?
- 29. 如何更改Typo3中显示菜单链接的值maxitems?
- 30. Drupal:如何添加菜单链接到密码更改?
其实我已经通过将用户重定向到正确的页面不涉及菜单解决。 – aneuryzm 2010-07-13 16:49:56
很高兴看到你已经解决了它,但是如果我可能会问:你在哪里放置了将访问者重定向到正确url的代码?如果你把PHP放在一个节点中,我想告诉你这篇文章(http://2bits.com/articles/free-your-content-php-moving-php-code-out-blocks-views-and-nodes .html),因为这种技术有一些缺点。 – marcvangend 2010-07-13 19:36:42
使用PHP输入格式创建节点应仅用作临时解决方案。即使在Drupal.org上,所有需要动态输出的页面都是由自定义模块(drupalorg.module)生成的,该模块包含Drupal.org所需的所有自定义项。 – kiamlaluno 2010-07-15 03:12:51