私のカスタムモジュールは、EntityAPIControllerクラスを拡張するカスタムエンティティを定義します。私はそれを基本的に機能させることができました。つまり、カスタムtpl.phpファイルを介してフィールドなどを表示します。しかし、私は_mymodule_preprocess_entity
_関数(推奨 here )を作成して、tpl.phpファイルにカスタム変数を追加したいと考えています。しかし、そのような関数は実行されていません(呼び出されていません)。
また、このエンティティを表示すると、entity.moduleの関数template_preprocess_entity(&$variables)
も実行されていないことがわかりました。
呼び出されるカスタムエンティティの前処理関数を作成するには、他に何を定義する必要がありますか?
一般的なmymodule_preprocess(&$variables, $hook)
関数を作成しましたが、特定の関数名はmymodule_preprocess_myentity
。ここで、myentity
はエンティティの適切な名前です。
だから、このコードは私のために働いています:
function mymodule_preprocess(&$variables, $hook) {
if (isset($variables['elements']['#entity_type'])) { // or maybe check for $hook name
$function = __FUNCTION__ . '_' . $variables['elements']['#entity_type'];
if (function_exists($function)) {
$function($variables, $hook);
}
}
}
function mymodule_preprocess_myentity(&$vars) {
...
}
より一般的なアプローチ:
_/**
* Implements hook_preprocess().
*/
function mymodule_preprocess(&$variables, $hook) {
if (isset($variables['elements']['#entity_type'])) {
$myhook = "preprocess_{$variables['elements']['#entity_type']}_{$variables['elements']['#bundle']}_{$variables['elements']['#view_mode']}";
$modules = module_implements($myhook);
foreach ($modules as $module) {
$function = "{$module}_{$myhook}";
$function($variables);
}
}
}
_
残念ながら、module_implements()
は、アクティブなテーマがプリプロセスフックを実装しているかどうかをチェックしません。