Drupalの強力な機能であるtheme関数についてメモる。
##Drupalのtheme関数とは?
Drupalでは「Theme」関数を使って、オリジナルのテンプレート(○○.tpl.php)に自分で定義した変数を持たせることができる。
##自作themeのレシピ
MYMODULE.moduleファイル内にtheme関数を書く。
function MYMODULE_theme( $existing, $type, $theme, $path )
{
$module_path = drupal_get_path('module', 'MYMODULE');
return array(
'contents_tabs' => array(
'variables' => array( 'step_terms' => NULL ),
'template' => 'guide_contents_tabs',
'path' => $module_path . '/template',
),
);
}
要素としては見たまま。
・contents_tabsはtheme名。この名前のthemeを使いますってときに使う。
・variablesはテンプレートファイル内で使用できる変数を定義する
・templateは使用するテンプレートファイル名
・pathは使用するテンプレートファイルのパス
最初の
$module_path = drupal_get_path('module', 'MYMODULE');
これは指定されたmoduleのパスを返す。
ほとんどの場合、moduleがデフォルトで配置されるのは、
sites/all/module/配下になるので
sites/all/module/MYMODULEという文字列を返すことになる。
これで
■theme関数を使って「contents_tabs」をcallすると
sites/all/module/MYMODULE/template/guide_contents_tabs.tpl.phpというテンプレートをつかえて
かつ、guide_contents_tabs.tpl.php内では「$step_terms」が使えるってことを定義したことになる。
これの使い方は幅広い!
たとえば自作ブロックを作るときに使える。こんな風に。
function MYMODULE_block_view( $delta = '' )
{
$block = array();
switch ( $delta ){
case 'guide_contents_tabs':
$block['subject'] = t("content tab");
$block['content'] = theme('contents_tabs', array('step_terms' => array('step1')));
break;
}
return $block;
}
$block['content']でtheme関数をcallしている。
最初の引数でcontents_tabsと使用するtheme名を指定し、2つ目にはarrayでテンプレートファイル内で使う変数に値を詰めている。
んで、これがテンプレートファイル
ほんとはもう少し複雑だったけど、削除した。
<?php
?>
<div id="foot-navi">
<?php foreach( $step_terms as $key => $step ): ?>
<p><?php print $step;?></p>
<?php endforeach; ?>
</div>