私のテーマにはこの前処理機能があります:
function hotness_preprocess_node(&$vars) {
$node = empty($vars['node']) ? FALSE : $vars['node'];
$vars['hotness_is_article_page'] = ($node && node_is_page($node) && $node->type == 'spot') ? TRUE : FALSE;
}
私がここで行う他の機能(図には示されていません)は問題なく動作します。ただし、テーマのtplファイル(具体的にはregion--branding.tpl.php)で$ hotness_is_article_pageを使用しようとすると、未定義のエラーが発生します。それが問題なら、私はオメガを使っています。
何らかの理由で、hotness_preprocess()関数のtplファイルでアクセス可能な変数を作成できるだけで、ページまたはノードのフックは作成できないようです。 hotness_preprocess()はページのロードごとに数回実行されるため、これは理想的ではありません。
何が悪いのですか?
hook_preprocess_node()
から追加された変数は、node.tpl.php、またはDrupalが選択する他のノードテンプレートで使用できます。これは、_$variables['theme_hook_suggestions']
_に提案が含まれているためです。 (Drupal 7)、または_$variables['template_files']
_(Drupal 6)。
リージョンテンプレートファイルで使用される変数を追加するには、hook_preprocess_region()
またはhook_preprocess()
のような別の前処理関数を使用する必要があります。後者は一般的な前処理関数です。その前処理関数に渡される2番目のパラメーターは、どのテーマフックが前処理されるかを示します。
つまり、デフォルトでは、領域前処理関数は_$variables['node']
_にアクセスできません。表示されているページに関連付けられているノードオブジェクトにアクセスする場合は、存在する場合は、 template_preprocess_page() で使用されている同様のコードを使用し、次の行をプリプロセス関数に追加する必要があります。
_if ($node = menu_get_object()) {
$variables['node'] = $node;
}
_
ページがノードに関連付けられていない場合、関数はFALSE
を返します。これは、たとえば、ユーザーがexample.com/user/1にアクセスしている場合に発生する可能性があります。