如何在Drupal中显示非活动任务选项卡

时间:2009-11-23 16:30:23

标签: drupal drupal-5

如果用户没有必要的权限,有没有办法向用户显示本地任务?现在看起来Drupal只是从页面代码中排除它们。我想展示它们,但是有不同的CSS类。

Drupal的版本是5.20

2 个答案:

答案 0 :(得分:4)

尽管Drupal 5和6之间的本地任务构建存在一些差异,但Mac是正确的,忽略当前用户无法访问的条目的逻辑非常深入地嵌入在menu.inc函数中。如果您想自己寻找,请从theme_menu_local_tasks()开始,然后按照那里的函数调用。

如果我必须实现您正在寻找的功能,我宁愿避免Macs建议直接搞乱菜单访问设置。相反,我用自定义版本覆盖theme_menu_local_tasks()并在那里复制条目检索逻辑。第一次运行将像以前一样获取主链接和次级链接,第二次运行将在impersonating another user(在这种情况下可能是用户1)时执行相同操作。这样,我会得到两个版本的本地任务标记,然后我需要以某种方式进行区分,以便找到当前用户不允许的那些,因此需要额外的CSS类。

请注意,这仍然有点难看,因为menu_primary_local_tasks()menu_secondary_local_tasks()返回已经主题的列表,因此比较需要处理标记,可能以某种方式解析li标记。因此,可能值得花一些时间尝试做同样的事情(将本地任务作为两个不同的用户获取),但使用较低级别的函数来获取主题之前的条目。

注意:如果您最终使用user impersonation logic,请务必使用安全的第二个版本,以便在模拟期间禁用会话保存。

答案 1 :(得分:3)

我知道D6版本的hook_menu比D5好多了。 AFAIK - 但是 - 您无法覆盖该行为,因为它在menu.inc中已经过硬编码。

如果我是正确的以上的内容,一个解决方法(相当不优雅,我必须承认)可能是:

  1. 从菜单项中删除访问控制,以便所有用户都可以看到所有菜单项。
  2. 直接在访问控制中设置访问控制(稍后您将使该选项卡不可点击,但如果用户直接插入URL,则会阻止访问他们看不到的页面。)
  3. 在显示选项卡的页面中,根据用户拥有的角色加载不同的js文件。具有有限访问权限的用户的js文件将根据文本内容选择标签(至少在D6标签中没有获得任何“个人”类:它们只获得一个共同的“标签”),它将删除指向用户无权访问的标签,它会将自定义类添加到应以不同方式显示的标签中。
  4. 为自定义类添加CSS主题。
  5. 如前所述,我不太了解D5,所以也可能会以更清洁的方式实现您想要的目标!