Drupalは、テーマのテンプレート(.tpl.phpファイル)からページのHTMLを作成する前に、前処理の「フック」を実行します。フックは基本的に、モジュールとテーマがDrupalコアプロセスをオーバーライドまたは「フック」できるようにする関数の命名規則です。
たとえば、ユーザーがログインしたときにメッセージを表示する場合は、を使用できますhook_user_login
。
function MODULENAME_user_login(&$edit, $account) {
drupal_set_message("Welcome, ". $account->name);
}
ユーザーがログインすると、Drupalは「_user_login」で終わるすべてのロードされた関数を探し、それらを実行します。この関数が有効なモジュールにある場合は、ロードされているため、同様に実行されます。
名前の付いた変数$site_section
をファイルで使用できるようにするpage.tpl.php
場合は、にフックできますtemplate_preprocess_page
。これはテーマフックなので、名前は少し異なりますが、ほとんど同じように機能します。テーマからこのフックを呼び出すには、テーマのディレクトリに呼び出されるファイルを作成する必要がありますtemplate.php
。内部template.php
に、以下を追加します。
<?php
function THEMENAME_preprocess_page(&$vars){
switch (drupal_strtolower($vars['node']->title)) {
case "about page":
$site_section = "about";
break;
case "news page":
case "news page1":
case "news page2":
$site_section = "news";
break;
default:
$site_section = "none";
break;
}
$vars['site_section'] = $site_section;
}
は<?php
、進行中のすべてのコードをPHPとして扱うようにサーバーに指示するために使用されます。次に、Drupalのページ変数の配列を。というローカル変数にロードする目的でフック関数を宣言します$vars
。&
beforeを追加することにより$vars
、この関数の外部で使用するために値を変更できるようになります。
switchステートメントを使用すると、ページタイトルの複数の値を効率的にテストできます。ノードのタイトルの値には大文字、小文字、および記号が含まれる場合があるため、大文字と小文字が区別される不一致を回避するために、タイトルを小文字に変換し、それのみをテストします(ただし、記号は引き続きタイトルに含まれます) )。switchステートメントの後、$site_section
ローカル値の値を$vars
で使用するために参照される配列に設定しますpage.tpl.php
。
ただし、テーマを設定する目的でサイトをセクションに分割することが目的である場合は、それを実現する他の方法があります。数ヶ月前の同様の状況に対する私の答えは役に立つかもしれません。