【问题标题】:How to show inactive task tabs in Drupal如何在 Drupal 中显示非活动任务选项卡
【发布时间】:2009-11-23 16:30:23
【问题描述】:

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

Drupal 的版本是 5.20

【问题讨论】:

    标签: drupal drupal-5


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,已经完成了。有效。用户模拟不是必需的,但无论如何感谢您的链接。
    • 我也喜欢这种方法。与我之前提出的相比,我看到的最大优势是它的扩展性更好:由于标记是由某种“差异”功能生成的,而不是通过其文本内容选择菜单条目,因此应用此解决方案更快如果您需要调整的菜单数量增加。它也不依赖于 js/jQuery(尽管几乎每个浏览器都支持)是一个“依赖”,更多的是让您的页面正确显示。
    【解决方案2】:

    我比 D5 更了解 D6 版本的 hook_menu。 AFAIK - 但是 - 您不能覆盖该行为,因为它是在 menu.inc 中硬编码的。

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

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

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

    【讨论】:

    • +1 - 我会使用另一种方法(如在单独的答案中提出的),只是为了防止需要对所有受影响的菜单回调添加访问检查,这将是麻烦的维护。但这个版本是一个有效的选择,很可能更容易/更适合需要较少通用调整的情况。
    猜你喜欢
    • 2016-09-19
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多