一部のモジュールが hook_process() を実装して一部の変数のコンテンツを変更し、それらのコンテンツをテーマ別コンテンツで置き換えることを考慮します。この場合、モジュールは の代わりにhook_process()
を実装する必要がありますhook_preprocess() (または hook_preprocess_HOOK() )?
function rdf_process(&$variables, $hook) {
// Handles attributes needed for content not covered by title, content,
// and field items. It does this by adjusting the variable sent to the
// template so that the template doesn't have to worry about it. See
// theme_rdf_template_variable_wrapper().
if (!empty($variables['rdf_template_variable_attributes_array'])) {
foreach ($variables['rdf_template_variable_attributes_array'] as $variable_name => $attributes) {
$context = array(
'hook' => $hook,
'variable_name' => $variable_name,
'variables' => $variables,
);
$variables[$variable_name] = theme('rdf_template_variable_wrapper', array('content' => $variables[$variable_name], 'attributes' => $attributes, 'context' => $context));
}
}
// Handles additional attributes about a template entity that for RDF parsing
// reasons, can't be placed into that template's $attributes variable. This
// is "meta" information that is related to particular content, so render it
// close to that content.
if (!empty($variables['rdf_metadata_attributes_array'])) {
if (!isset($variables['content']['#prefix'])) {
$variables['content']['#prefix'] = '';
}
$variables['content']['#prefix'] = theme('rdf_metadata', array('metadata' => $variables['rdf_metadata_attributes_array'])) . $variables['content']['#prefix'];
}
}
テーマシステム全体の説明は避けます。関数の順序と使用法は、最もよく説明されています ここ 。
プリプロセッサ関数は、プロセス関数の前に実行されます。すべてのプリプロセッサが実行された後にすべてのテーマ呼び出しに影響を与えたい場合は、フックプロセスを実行する必要があります。 (まあ、私はそれが.tplファイルでのすべてのテーマ呼び出しであると信じています。)
RDFは、すべてのテーマテンプレートにメタデータを挿入したいので、良い例です。しかし、ほとんどの場合それはあなたがしたいことではありません。別の例は Pirate モジュールのようなものです。
プリプロセッサはよりターゲットを絞っています。たとえばリストのみを変更したい場合は、そこでプリプロセスフックを使用できます。 hook_preprocess_HOOK()
sはテンプレートと関数に対して実行されると思います。
hook_preprocess()
はトリガーしない限りトリガーされないため、テーマでオーバーライドされないものを前処理する場合は、theme_preprocess_HOOK()
をテーマで使用できます。