1

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

我不会对此感到如此惊讶,除非我有另一个 Drupal 站点做同样的事情,而且它工作正常。唯一的区别是这个站点是基于 Acquia Drupal 发行版的,并且它工作的另一个站点已经有一段时间没有更新了,所以有旧版本的 Drupal 核心和 Views。

我读了一些关于模块权重的东西,并尝试将我的面包屑模块​​上的权重设置为一个非常高的值,但这并没有帮助。

感谢您的任何想法!

4

1 回答 1

1

这听起来像是一个执行顺序问题。查看menu_breadcrumb模块,它在 上进行操作hook_init,而 views 模块drupal_set_title在 的 execute 方法中调用它views_plugin_display_page,这发生在稍后阶段。在这种情况下,操作模块权重并没有帮助,因为权重仅确定每个 hook的调用/执行顺序,但它们不会影响整个模块的执行顺序。(换句话说,“较重”的模块hook_init将在hook_init较轻的模块之后被调用,但仍然在例如hook_nodeapi较轻的模块之前。)

正如您所说,这在另一个站点上有效,我感到有些惊讶-可能是drupal_set_title视图的调用在以后的版本中被移动了,但我对此表示怀疑,因为我记得大约一年前就面临过这个问题。也许menu_breadcrumb模块改变了?

但是,我当时通过将面包屑操作从 移动hook_initsomemodule_preprocess_page(),直接在那里调整$variables['breadcrumb']而不是调用来“解决”了这个问题drupal_set_breadcrumb。这不是最佳选择,因为它禁用了在页面主题化之前可能发生的任何其他面包屑操作,但如果您知道您总是想要您的面包屑,这可能是一个优势。

作为替代方案,可以在面包屑操作模块中实现其中一个视图挂钩,例如hook_views_pre_render并检查标题是否已经设置在那里。

于 2009-10-03T13:52:20.303 回答