我已经使用menu_breadcrumb模块作为基于当前URL路径生成面包屑的模块的基础。它在常规节点上运行良好,但在Views模块呈现的任何页面上,breadcrumb无法获取页面的标题。模块对drupal_get_title()
的调用返回空值。
我不会对此感到惊讶,除了我有另一个Drupal站点完全相同的东西,并且它正常工作。唯一的区别是这个站点是基于Acquia Drupal发行版,并且它工作的其他站点有一段时间没有更新,因此Drupal核心和视图的旧版本也是如此。
我读了一些关于模块权重的内容,并尝试将我的breadcrumb模块的权重设置为一个非常高的值,但这没有帮助。
感谢您的任何想法!
答案 0 :(得分:1)
这听起来像执行订单问题。查看menu_breadcrumb
模块,它在hook_init
上进行操作,而视图模块在drupal_set_title
的执行方法中调用views_plugin_display_page
,这发生在后期。在这种情况下操作模块权重没有帮助,因为权重仅确定每个挂钩的调用/执行顺序 ,但它们不会影响整个模块的执行顺序。 (换句话说,'较重'模块hook_init
将在较轻模块的hook_init
之后调用,但仍然在例如较轻模块的hook_nodeapi
之前调用。)
我有点惊讶的是,这可以在你所说的另一个网站上运行 - 可能是drupal_set_title
视图调用在以后的版本中被移动了,但我怀疑,因为我记得面对这个大约一年前的问题。也许menu_breadcrumb
模块发生了变化?
然而,我通过将面包屑操作从hook_init
移动到somemodule_preprocess_page()
,然后直接在那里调整$variables['breadcrumb']
而不是调用drupal_set_breadcrumb
来解决这个问题。这不是最佳的,因为它禁用了在页面主题化之前可能发生的任何其他面包屑操作,但是如果你知道你总是想要你的面包屑,那么这可能是一个优势。
作为替代方案,可以在面包屑操作模块中实现一个视图钩子,例如, hook_views_pre_render
并检查标题是否已设置在那里。