独自のhook_theme()
を定義するカスタムD7モジュールがあります。これは、いくつかのテーマ関数を定義し、それらは独自のテンプレートを定義します。次に例を示します。
_function foo_theme($existing, $type, $theme, $path) {
$items = array(
'post_foot' => array(
'template' => 'templates/post_foot',
'variables' => array('node' => (object)array())
)
);
return $items;
}
_
ご覧のとおり、それは独自のテンプレートを定義しています。これはfooモジュールにあり、この特定のケースでは_sites/all/modules/custom/foo/templates/post_foot.tpl.php
_です。
自分の_post_foot.tpl.php
_をテーマで定義し、フォールバックとしてfooのtplを使用できるようにしたいと思います。
これは自動的に起こりますか?オーバーライドを含めるには、hook_theme()
を拡張する必要がありますか?
これは自動的に行われるはずです。ほとんどのコアモジュールは、テーマフックを定義します。テーマフックの定義については、テーマでオーバーライドすることについて二度と考えません。たとえば、node_themeを見てみましょう http://api.drupal.org/api/drupal/modules--node--node.module/function/node_theme/7 。
Devel themerモジュールはそのようなことを手助けしてくれるはずです。 D7のいくつかの作業が必要ですが、役立つはずです。
これは、ハイフンがアンダースコアに置き換えられた後、テーマフックにテンプレートファイルとは異なる名前がない限り、自動的に発生します。その場合、自動検出は失敗します。
自動検出は、モジュールテンプレート名ではなく、モジュール定義のテーマフックの名前に基づいています。これは私にとって落とし穴でした。
モジュール内:
テーマフック:foo_theme_hook
テンプレート:theme-hook.tpl.php
テーマで
テンプレート:theme-hook.tpl.php
=失敗
修正するには、上記の例で、テーマフックの名前を「foo_theme_hook」ではなく「theme_hook」に変更するか、オーバーライドするテンプレートファイルの名前を「foo-theme-hook.tpl.php」に変更します。