複数の条件分岐{elseif}

広告

{if}関数では単独の条件分岐だけではなく{elseif}を使うことで複数の条件分岐を使って処理を分けることが出来ます。書式は次の通りです。

{if 条件式1}
  条件式1が真(true)の時に実行される処理
{elseif 条件式2}
  条件式1が偽(false)で条件式2が真(true)の時に実行される処理
{elseif 条件式3}
  条件式1及び条件式2が偽(false)で条件式3が真(true)の時に実行される処理
{else}
  全ての条件式が偽(false)の時に実行される処理
{/if}

{elseif}を使った場合の処理の流れは次の通りです。まず条件式1が評価され真だった場合にはブロック内の処理を行います。条件式1が偽だった場合にだけ次の条件式2が評価されます。条件式2が真だった場合にはブロック内の処理を行います。このように順に条件式を評価していき最後に全ての条件式が偽だった場合に{else}のブロック内の処理が行われます。

{elseif}は必要な数だけ追加できます。また{else}は必要なければ記述しなくても構いません。またどこかの条件式で真だった場合にはそれ以降の条件式の評価は行わない点に注意して下さい。

具体的には次のように記述します。

{if $pref == 'Tokyo'}
  出身は東京です。
{elseif $pref == 'Osaka'}
  出身は大阪です。
{elseif $pref == 'Aichi'}
  出身は愛知です。
{else}
  出身は東京/大阪/愛知以外です。
{/if}

上記の場合は変数「pref」に渡されてきた値を順次比較して処理を分けています。

サンプルプログラム

では簡単なサンプルプログラムを作成して試してみます。

sample4-1.php

<?php

require_once('Smarty.class.php');

$smarty = new Smarty();

$smarty->template_dir = 'd:/smartysample/if/templates/';
$smarty->compile_dir  = 'd:/smartysample/if/templates_c/';
$smarty->config_dir   = 'd:/smartysample/if/configs/';
$smarty->cache_dir    = 'd:/smartysample/if/cache/';

$smarty->assign('title', '条件分岐のテスト');
$smarty->assign('pref', 'Aichi');

$smarty->display('sample4-1.tpl');

?>

上記を「sample4-1.php」の名前で「(Apacheドキュメントルート)¥smarty¥if」に保存します。

sample4-1.tpl

{* Smarty if/sample4-1.tpl *}
<html>
<head>
<title>Smarty Test</title>
</head>
<body>

<h1>{$title}</h1>
<p>出身地をお知らせします。</p>

<p>
{if $pref == 'Tokyo'}
出身は東京です。
{elseif $pref == 'Osaka'}
出身は大阪です。
{elseif $pref == 'Aichi'}
出身は愛知です。
{else}
出身は東京/大阪/愛知以外です。
{/if}
</p>

</body>
</html>

上記を「sample4-1.tpl」の名前で「D:¥smartysample¥if¥templates」に保存します。

そしてブラウザから「http://localhost/smarty/if/sample4-1.php」へアクセスして下さい。

複数の条件分岐{elseif}

( Written by Tatsuo Ikura )