【问题标题】:How to show only populated menu tabs in Drupal?如何在 Drupal 中仅显示填充的菜单选项卡?
【发布时间】:2011-02-10 00:03:53
【问题描述】:

最近在评估 Drupal 的 InviteSupport 模块时,我们意识到默认的标签导航不是最用户友好的。特别是,每个模块都有一个标签页,显示各种类别的邀请或支持票(待定、取消等)。对于开发人员来说,预先定义所有选项卡是最简单的,但从用户的角度来看,只提供包含内容的选项卡更有意义。

我假设可以运行查询来检查应该为特定用户显示哪些选项卡并使用hook_menu_alter 更改菜单。然而,这是最好的方法还是会导致 Drupal 的菜单缓存出现问题?有没有更好的办法?

【问题讨论】:

    标签: drupal drupal-6 tabs usability menu


    【解决方案1】:

    jhedstrom 的回答是正确的,但我不相信动态显示/隐藏本地任务会带来更好的用户体验,这听起来让我有点困惑。

    相反,我的建议是使用标题回调(可以使用相同的 hook_menu_alter() 添加并显示该特定选项卡内的内容数量。例如,我使用 Privatemsg 来显示数量未读消息。

    有关示例,请参阅 privatemsg_title_callback(),有关标题回调的更多信息,请参阅 hook_menu

    【讨论】:

    • 谢谢,我喜欢这个主意!有趣的是,我们也在添加 Privatemsg,但我还没有注意到这个功能。
    【解决方案2】:

    如果您想以动态方式选择性地删除选项卡(例如,一个节点获取选项卡,而另一个节点没有),您将无法使用 hook_menu_alter(),因为它仅在菜单缓存时有效正在建设中。但是,您可以通过覆盖菜单访问回调来做到这一点。如果拒绝访问某个选项卡,则不会显示该选项卡。

    例如,要覆盖节点选项卡,您可以执行以下操作:

    function mymodule_menu_alter(&$items) {
      $item['node/%node/foo']['access callback'] = 'mymodule_override_access';
    }
    
    function mymodule_override_access($node) {
      // Perform queries, logic, etc to determine if content exists at node/nid/foo.
      // Return false if there is no content, otherwise fall through to the original
      // access callback function.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多