为什么drupal_get_title()在Views页面上返回空?

时间:2009-10-02 21:13:47

标签: drupal drupal-6 drupal-views

我已经使用menu_breadcrumb模块作为基于当前URL路径生成面包屑的模块的基础。它在常规节点上运行良好,但在Views模块呈现的任何页面上,breadcrumb无法获取页面的标题。模块对drupal_get_title()的调用返回空值。

我不会对此感到惊讶,除了我有另一个Drupal站点完全相同的东西,并且它正常工作。唯一的区别是这个站点是基于Acquia Drupal发行版,并且它工作的其他站点有一段时间没有更新,因此Drupal核心和视图的旧版本也是如此。

我读了一些关于模块权重的内容,并尝试将我的breadcrumb模块的权重设置为一个非常高的值,但这没有帮助。

感谢您的任何想法!

1 个答案:

答案 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并检查标题是否已设置在那里。