テーマ関数を直接呼び出すのではなく、theme()
を使用する必要があるのはなぜですか?
theme('box', $title, drupal_get_form('comment_form', $edit, $title));
次のコードのように、コードがテーマ関数を直接呼び出さないのはなぜですか?
theme_box($title, drupal_get_form('comment_form', $edit, $title));
オーバーライドシステムを機能させるには、theme()関数を使用する必要があります。たとえば、テーマがモジュールのテーマ関数をオーバーライドしたり、テンプレート(.tpl.php)ファイルが代わりに使用されたりする場合があります。
作成した例では、theme_box()
を呼び出すと、特定の関数が呼び出されます。 theme('box')
を呼び出すとき、関数は通常theme_box()
である関数を呼び出していますが、モジュールが次のコードを使用して hook_theme_registry_alter() を実装する場合、関数は呼び出されるのはtheme_mymodule_box()
です。
function mymodule_theme_registry_alter(&$theme_registry) {
// Kill the next/previous forum topic navigation links.
if (!empty($theme_registry['box'])) {
$theme_registry['box']['function'] = 'theme_mymodule_box';
}
}
}
Drupal 7では、テンプレートファイルを使用するテーマ関数だけでなく、すべてのテーマ関数に前処理関数があります。これは、ほとんどの場合、テーマ関数をオーバーライドする必要がないことを意味します。コードがテーマ関数に渡された変数の内容を変更する必要があるだけの場合、前処理関数を使用することは、Drupal 7。