Drupal 6动态菜单项

时间:2010-02-01 06:51:24

标签: php drupal caching menuitem

我需要创建一个菜单项,如果用户有特定条件,则会更改其标题和链接。 Drupal缓存了所有的菜单,所以我无法想到一种方法。

例如,用户有一个节点附加到他的个人资料,菜单项是“创建blabla”(链接节点/添加/ blabla) 用户没有节点,菜单项是“Create notblablabla”(link node / add / notblabla)

6 个答案:

答案 0 :(得分:2)

最好和最简单的方法是使用hook_menu和param title_callback

请参阅thedrupalblog.comdrupal.org

答案 1 :(得分:1)

Drupal不允许动态菜单项,但如果不允许用户去那里,它可以隐藏某些菜单项。参考您的示例,如果您创建两个链接并使用权限系统将这些节点类型的创建限制为某些角色,Drupal将仅在用户具有所需角色时显示菜单项。也许这对你的情况有帮助。

其他选项包括:

  • 编写一个简单的模块,显示所有用户的单个链接,并在点击时重定向到相应的页面
  • 创建一个自定义块,根据当前用户显示正确的链接(确保未缓存该块)
  • 使用像googletorp建议的javascript(虽然我不会因为他提到的原因推荐它)

答案 2 :(得分:0)

  • 一种简单的方法是使用JavaScript。您可以使用jQuery在没有太多efford的情况下更改HTML。这将要求您的用户启用了JS,因此它不是一个完美的解决方案。

  • 另一种选择是拥有一个菜单项,该菜单项链接到您在模块中创建的网址。他可以做条件检查将用户重定向到应该重定向到的任何网址。这种方法的唯一问题是更改菜单项的标题。但是你可能能够为这两种情况提供合适的描述。您还可以使用JS来更改链接的名称。这样,您可以在没有JS的情况下保持功能完整,但为启用它的用户改进UI。

答案 3 :(得分:0)

我可能会创建两个菜单项,并根据条件使用主题系统隐藏其中一个。

已经有一段时间了,但我会看一下:

答案 4 :(得分:0)

由于此菜单项似乎是基于用户个人资料信息,我建议编写一个简单的模块,实现hook_menu_alter()以根据您的条件更改菜单。然后,您可以在menu_cache_clear()内拨打hook_user(),以便在用户个人资料更改时续订菜单缓存。

答案 5 :(得分:0)

您是否尝试过此操作(当然也将其他条件插入'if'语句中):


function hook_translated_menu_link_alter(&$item, $map) {
  if ($item['href'] == 'node/add/blabla') {
    $item['href'] = 'node/add/notblabla';
  }
}

您可能还需要将链接标记为可更改:


function hook_menu_link_alter(&$item, $menu) {
  if ($item['link_path'] == 'node/add/blabla') {
    $item['options']['alter'] = TRUE;
  }
}