1

現在の URL パスに基づいてブレッドクラムを生成するモジュールの基礎として、menu_breadcrumb モジュールを使用しました。通常のノードではうまく機能しますが、Views モジュールによってレンダリングされるページでは、ブレッドクラムはページのタイトルを取得できません。モジュールの への呼び出しdrupal_get_title()は、空の値を返します。

まったく同じことを行う別の Drupal サイトがあり、正しく動作することを除いて、これにはそれほど驚かないでしょう。唯一の違いは、このサイトが Acquia Drupal ディストリビューションに基づいていることと、このサイトが機能する他のサイトがしばらく更新されていないことです。そのため、Drupal コアとビューの両方の古いバージョンがあります。

モジュールの重みについて何か読んで、ブレッドクラム モジュールの重みを非常に高い値に設定しようとしましたが、役に立ちませんでした。

アイデアをありがとう!

4

1 に答える 1

1

これは、実行順序の問題のように聞こえます。モジュールを見るとmenu_breadcrumb、それは で操作を行いhook_initますが、ビュー モジュールはdrupal_set_titleの execute メソッドで を呼び出しますviews_plugin_display_page。これは後の段階で行われます。重みはフックごとの呼び出し/実行順序のみを決定するため、モジュールの重みを操作しても、このような場合には役に立ちませんが、モジュール全体の実行順序には影響しません。(言い換えると、「重い」モジュールhook_initは、軽いモジュールの の後に呼び出されますがhook_init、たとえばhook_nodeapi軽いモジュールの の前でも呼び出されます。)

あなたが述べたように、これが他のサイトで機能することに少し驚いています-drupal_set_titleビューの呼び出しが後のバージョンで移動した可能性がありますが、約1年前にこの問題に正確に直面したことを覚えているので、それは疑わしいです. もしかしてmenu_breadcrumbモジュールが変わった?

ただし、ブレッドクラム操作を からhook_initに移動し、を呼び出す代わりに直接somemodule_preprocess_page()調整することで、当時これを「解決」しました。これは、ページのテーマ設定の前に発生する可能性のある他のブレッドクラム操作を無効にするため、最適ではありませんが、ブレッドクラムが常に必要であることがわかっている場合は、これが有利になる可能性があります。$variables['breadcrumb']drupal_set_breadcrumb

別の方法として、ブレッドクラム操作モジュールにビュー フックの 1 つを実装することもできます。たとえばhook_views_pre_render、タイトルが既にそこに設定されているかどうかを確認します。

于 2009-10-03T13:52:20.303 に答える