テーマシステムの仕組みを理解する為に、トップページ上部に、アクセスする度に異なる画像を表示するような簡単なカスタマイズを行ってみます。ここで変更するファイルは、page.tpl.php、template.phpになります。
1.表示する画像(ship1.jpg、ship2.jpg、ship3.jpg、ship4.jpg)を作成し、zen/imagesディレクトリ以下にアップロードします。
2.template.phpの編集1
$topimage = array(
"/images/ship1.jpg",
"/images/ship2.jpg",
"/images/ship3.jpg",
"/images/ship4.jpg",
);
$variables['topimage'] = $topimage[rand(0, count($topimage)-1)];
<?php if ($is_front){ ?>
<img src="<?php print check_url($base_path . $directory . $topimage) ?>" alt="" />
<?php } ?>
DrupalのテーマAPIコール時には、下記のように、
1.<テーマ名>_<機能名>
2.<テーマエンジン名>_<機能名>
3.theme_<機能名>
の順で関数が存在するかを確認し、もし関数が存在した場合は、その関数を実行する仕様になっています。
したがって、もしzenテーマのtemplate.phpに zen_page 関数が定義されていた場合、 phptemplate_page 2 の替わりに zen_page 関数が実行される事になります 3 。
上記のtemplate.phpの編集部分では、phptemplate.engineから関数をまるごとコピーして変更する方法を紹介しましたが、単純にテンプレートに変数を追加する目的であれば、以下のコードをtemplate.phpに追加する方が簡単です4。
function _phptemplate_variables($hook, $vars) {
switch($hook) {
case 'page' :
$topimage = array(
"/images/ship1.jpg",
"/images/ship2.jpg",
"/images/ship3.jpg",
"/images/ship4.jpg",
);
$vars['topimage'] = $topimage[rand(0, count($topimage)-1)];
break;
}
return $vars;
}