如何在 Drupal 中仅显示已填充的菜单选项卡?
在评估邀请和模块,我们意识到默认的选项卡导航并不是最用户友好的。特别是,每个模块都有一个选项卡页面,显示邀请或支持票证的各种类别(待处理、已取消等)。对于开发人员来说,预定义所有选项卡是最简单的,但从用户的角度来看,只提供包含内容的选项卡更有意义。
我假设可以运行查询来检查应为特定用户显示哪些选项卡,并使用 hook_menu_alter.然而,这是最好的方法还是会导致 Drupal 菜单缓存出现问题?有更好的办法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
jhedstrom 的答案是正确的,但我不太相信动态显示/隐藏本地任务会带来更好的用户体验,这对我来说有点令人困惑。
相反,我的建议是使用标题回调(可以使用相同的 hook_menu_alter() 添加并显示该特定选项卡内的内容数量。这就是我用于 Privatemsg 的示例,以显示未读消息的数量。
有关示例,请参阅 privatemsg_title_callback() 和 < a href="http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_menu/7" rel="nofollow">hook_menu 了解更多信息关于一般标题回调。
The answer by jhedstrom is correct, but I'm not that convinced that dynamically showing/hiding local tasks results in better UX, that sounds kinda confusing to me.
Instead, my suggestion would be to use a title callback (which can be added with the same hook_menu_alter() and show the number of things inside that specific tab. That is what I for example use for Privatemsg to show the number of unread messages.
See privatemsg_title_callback() for an example and hook_menu for more information about title callbacks in general.
如果您想以动态方式有选择地删除选项卡(例如,一个节点获得选项卡,而另一个节点则没有),您将无法使用 hook_menu_alter() 因为这仅在构建菜单缓存时有效。但是,您可以通过覆盖菜单访问回调来完成此操作。如果对选项卡的访问被拒绝,则不会显示该选项卡。
例如,要覆盖节点选项卡,您可以执行以下操作:
If you want to selectively remove tabs in a dynamic way (eg, one node gets a tab, while another does not), you won't be able to use hook_menu_alter() because that only has an effect when the menu cache is being built. However, you can do this by overriding the menu access callback. If access to a tab is denied, it won't be displayed.
For example, to override a node tab, you might do something like this: