LoginSignup
5
5

More than 5 years have passed since last update.

sutekicut「theme・・・お前がいれば何もいらないぜベイビー」 Drupal7「sutekicutさんステキ・・・」

Last updated at Posted at 2014-06-17

Drupalの強力な機能であるtheme関数についてメモる。

Drupalのtheme関数とは?

Drupalでは「Theme」関数を使って、オリジナルのテンプレート(○○.tpl.php)に自分で定義した変数を持たせることができる。

自作themeのレシピ

MYMODULE.moduleファイル内にtheme関数を書く。

mymodule.module
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」が使えるってことを定義したことになる。

これの使い方は幅広い!
たとえば自作ブロックを作るときに使える。こんな風に。

MYMODULE.module

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でテンプレートファイル内で使う変数に値を詰めている。

んで、これがテンプレートファイル
ほんとはもう少し複雑だったけど、削除した。

guide_contents_tabs.tpl.php

<?php
?>
<div id="foot-navi">
    <?php foreach( $step_terms as $key => $step ): ?>
        <p><?php print $step;?></p>
    <?php endforeach; ?>
</div>

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5