profile2などのエンティティタイプに基づいてhook_preprocess関数を定義することは可能ですか?


8

関数hook_preprocess(&$vars, $hook)を使用してフックの可能性について説明しましたが、使用できるのはエンティティのみでした。のようなことをすることは可能ですかhook_preprocess_profile2_entity()、またはエンティティタイプをチェックするためにif条件を書かなければなりhook_preprocess_entity()ませんか?

回答:


15

これにより、ノードの前処理関数のZenテーマパターンがエンティティに適合します。

<?php

/**
 * Implements template_preprocess_entity().
 *
 * Runs a entity specific preprocess function, if it exists.
 */
function MYTHEME_preprocess_entity(&$variables, $hook) {
  $function = __FUNCTION__ . '_' . $variables['entity_type'];
  if (function_exists($function)) {
    $function($variables, $hook);
  }
}

/**
 * Profile2 specific implementation of template_preprocess_entity().
 */
function MYTHEME_preprocess_entity_profile2(&$variables, $hook) {
}

/**
 * Field Collection specific implementation of template_preprocess_entity().
 */
function MYTHEME_preprocess_entity_field_collection_item(&$variables, $hook) {
}

これは素晴らしいです。PHPでは、このようなことを実行できることをいつも忘れています。
mpdonadio

親テーマでそれを行い、継承/オーバーライドしたい場合は、hook_themeをさらに掘り下げる必要があります。Zenのhook_themeは良い例です(ただし長い)。
Capi Etheriel 2011

誰かがテーマレイヤーの外で同様のことを実現する方法を教えてくれたら嬉しいです!Driving me nuts ...
NikLP 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.