ロゴ
HOME > Smarty > Smartyテンプレートの中で条件分岐(IF文)を使ってみよう

Smartyテンプレートの中で条件分岐(IF文)を使ってみよう

2014年03月07日

前回はテンプレートの中に変数を表示する方法についての記事を書きました。変数は名前が示す通り、変化する値です。変化する以上は、値が必ずしもあるとは限りません。空の場合も有ります。

変数が空の場合は別なメッセージを表示する、といった事をやってみます。

サンプル

<?php
require_once('Smarty/Smarty.class.php');

$smarty = new Smarty;
$smarty-> template_dir = 'tpl/';   //テンプレートフォルダー
$smarty-> compile_dir  = 'cache/'; //キャッシュフォルダー

//変数を定義する
   $smarty->assign('name', '山田太朗');
   $smarty->assign('address1', '北海道');
   $smarty->assign('address2', '');

$smarty->display('smarty_Header.tpl');
$smarty->display('smarty_Contents_04.tpl');
$smarty->display('smarty_Footer.tpl');
?>

address2が空なので、これが無い場合は別なメッセージを表示するよう、テンプレートに書きます。

<p>{$name}</p>
<p>{$address1}</p>

{if $address2}
   <p>{$address2}</p>
{else}
   <p style="color:red">詳細な住所は記載が有りません</p>
{/if}

Smarty変数 address2 があればそれを表示、無ければ「詳細な住所は記載が有りません」というメッセージを表示します。

IF文に関して (PHPの場合)

if( $n == 1) { // $nが1の場合
   echo 1; 
} elseif( $n == 2) { // $nが2の場合
   echo 2;
}else{ // $nが1でも2でも無い場合
   echo '値が有りません';
}

これをSmartyテンプレートで書くと以下のようになります。

{if $n == 1}
   1
{elseif $n == 2}
   2
{else}
   値が有りません
{/if}

ここまで読んで「じゃプログラマがPHP側で変数に詳細な住所は記載が有りませんと書けばいいんじゃない?」と思った方は鋭いです。どちら側で処理するかは、プログラマとデザイナーで決める事になりますが、テンプレートは出来るだけデザインに特化させ、処理はPHP側で行うのが理想です。