web-dev-qa-db-ja.com

モジュール内のノードの前処理

より一般的な質問です。明確にするために。 template.phpファイルで次の方法で前処理関数を使用できます。

function mytheme_preprocess_node(&$vars) {
  // Do some stuff
}

しかし、モジュールでノードを前処理する方法はありますか? drupal APIで関数hook_preprocess_node()を検索してきましたが、D7にはそのような関数はありませんが、8を含む他のすべてのバージョンのdrupalには存在しますが、template_preprocess_node( )モジュールで使用できる関数として?たとえば、モジュールの名前が 'custom'の場合、この方法で使用できますか?

function custom_preprocess_node(&$vars) {
  // Do some stuff
}

カスタムモジュールのノードをオーバーライドするにはどうすればよいですか?

6
David

確かにできます。 hook_preprocess_HOOK() はあなたが探しているものです。ドキュメントから...

特定のテーマフックのテーマ変数を前処理します。

このフックにより、モジュールは特定のテーマフックのテーマ変数を前処理できます。モジュールが定義していないテーマフックのテーマ前処理をオーバーライドまたは追加する必要がある場合にのみ使用してください。

6
Shawn Conn

Drupal7では、モジュールとテーマの両方が同じ方法で前処理関数を使用でき、指定されたテーマフックは、モジュールとテーマの両方に由来する多くの前処理実装を持つことができます。

Drupalフレームワークにおけるこのようなものと同様に、これらの関数が実行される順序を知ることが重要です。モジュールからのプリプロセス実装が最初に実行され、テーマによる実装が最後に実行されます。

Drupalコアモジュールを簡単に検索すると、nodeおよびrdfモジュールの例が表示されます。

6
Alex Gill

これに関する良い記事を見つけました http://themery.com/dgd7/advanced-theming/preprocess-process/implement