Published on

Smartyのテンプレート上のPHPの中でSmarty変数にアクセスするget_template_vars()

Authors

Smartyのテンプレート上で簡単なロジックを加えたりしたいという場面が時々出てきます。そんな時にこの「get_template_vars()」という関数を使います。

get_template_vars()

get_template_vars() — 割り当てられた変数の値を返します。 パラメータが与えられない場合は、全ての割り当てられた変数の配列を返します。

global $smarty;
$start = $smarty->get\_template\_vars("update");

if($start){
    $now = date("Y/m/d");
    $end = date("Y/m/d", strtotime("$start 1 month"));
    if($now < $end){
        echo '<img src="../img/foo.jpg">';
    }
}

こんな感じで作ってみました。

updateという変数に値が入っていれば指定した画像を表示させるというものです。今日の日付を取得して、その日から1か月後の日付を導き出して、その日まで画像を表示させます。

あとがき?

ちなみにSmartyのマニュアルにこんなことが書いてあります。

Note テンプレート内にPHPコードを埋め込む事は、とにかく避けるべきです。 代わりに、 カスタム関数 または 修飾子 を使用します。

出典:http://www.smarty.net/docsv2/ja/variable.php.handling.tpl

 

Smartyはテンプレートエンジンというデザインとロジックを分離して管理することができるというのが大きなメリットです。本来はこういったロジックの部分はロジック側で行うべきなのですが、デザインとロジックが切り離されている以上デザイン側でロジックに手を加えるという事は容易にできません。

 

Smartyを勉強していると、ちょくちょく出てくるのがSmartyなどのテンプレートエンジンは必要なのかってこと。僕の会社はロジックの部分を外注しているので直接弄ることはできません。そういった訳でテンプレートに直接ロジックを書いたりする場面が出てきます。そういった理由からPHPを勉強するきっかけとなったのでSmartyを悪く言うつもりは無いのですが、会社の部下にSmartyのこういった部分を教えていくよりはもっとPHPの勉強をすることに時間を費やさせた方がいいのではないかと考えたりします。