1

如果用户没有必要的权限,有什么方法可以向用户显示本地任务?现在看来 Drupal 只是将它们排除在页面代码之外。我想展示它们,但使用不同的 CSS 类。

Drupal 的版本是 5.20

4

2 回答 2

4

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

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

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

注意:如果您最终使用用户模拟逻辑,请确保使用安全的第二个版本,该版本在模拟期间禁用会话保存。

于 2009-11-24T09:42:46.627 回答
3

我知道 hook_menu 的 D6 版本比 D5 的要好得多。AFAIK - 但是 - 您不能覆盖该行为,因为它是在 menu.inc 中硬编码的。

如果我对上述内容正确,则解决方法(我必须承认相当不雅)可能是:

  1. 从菜单项中删除访问控制,以便所有用户都可以看到所有菜单项。
  2. 直接将访问控制放在回调中(您将暂时使选项卡不可点击,但如果用户直接插入 URL,这将阻止访问他们不能看到的页面)。
  3. 在显示选项卡的页面中,根据用户的角色加载不同的js文件。访问受限用户的 js 文件将通过其文本内容选择选项卡(至少在 D6 选项卡中没有任何“个人”类:他们只得到一个公共“选项卡”类),它将删除指向用户无权访问的选项卡,它将为那些应该以不同方式显示的选项卡添加自定义类。
  4. 为您的自定义类添加 CSS 主题。

如前所述,我对 D5 了解不多,因此也可能证明您实际上可以以更简洁的方式实现您想要的!

于 2009-11-23T18:14:06.250 回答