{if},{elseif},{else}

Smarty における {if} ステートメントは、PHP の if と同等の柔軟性を持っています。 さらに、テンプレートエンジンのための機能をいくつか追加しています。 全ての {if} は、対応する {/if} とペアである必要があります。{else}{elseif} も使用できます。 ||or&&andis_array() など、PHP の条件演算子や関数はすべて利用可能です。

$security が有効な場合は、 $security_settings の配列 IF_FUNCS に含まれる PHP の関数のみが利用可能となります。

以下は認識される条件演算子の一覧です。 これらはスペースによって周りの要素から分離される必要があります。 [] 内に記載された項目は任意である事に注意して下さい。 "PHP 相当" には、PHP において当てはまるものが示されます。

条件演算子 代替 構文例 意味 PHP 相当
== eq $a eq $b 等しい ==
!= ne, neq $a neq $b 等しくない !=
> gt $a gt $b より大きい >
< lt $a lt $b より小さい <
>= gte, ge $a ge $b 以上 >=
<= lte, le $a le $b 以下 <=
===   $a === 0 同一性のチェック ===
! not not $a 否定 (単項) !
% mod $a mod $b 剰余 %
is [not] div by   $a is not div by 4 割り切れる $a % $b == 0
is [not] even   $a is not even 偶数である [ない] (単項) $a % 2 == 0
is [not] even by   $a is not even by $b 偶数番目のグループである [ない] ($a / $b) % 2 == 0
is [not] odd   $a is not odd 奇数である [ない] (単項) $a % 2 != 0
is [not] odd by   $a is not odd by $b 奇数番目のグループである [ない] ($a / $b) % 2 != 0

Example 7.15. {if} ステートメント


{if $name eq 'Fred'}
    Welcome Sir.
{elseif $name eq 'Wilma'}
    Welcome Ma'am.
{else}
    Welcome, whatever you are.
{/if}

{* 論理演算子 "or" の例 *}
{if $name eq 'Fred' or $name eq 'Wilma'}
   ...
{/if}

{* 上と同じ *}
{if $name == 'Fred' || $name == 'Wilma'}
   ...
{/if}


{* 括弧は使用可能 *}
{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
   ...
{/if}


{* PHP 関数を埋め込むことも可能 *}
{if count($var) gt 0}
   ...
{/if}

{* 配列のチェック *}
{if is_array($foo) }
   .....
{/if}

{* null でないことのチェック *}
{if isset($foo) }
   .....
{/if}


{* 値が偶数か奇数か *}
{if $var is even}
   ...
{/if}
{if $var is odd}
   ...
{/if}
{if $var is not odd}
   ...
{/if}


{* 値が 4 で割り切れるかどうか *}
{if $var is div by 4}
   ...
{/if}


{*
  ふたつずつグループ化したときに、値が even であるかどうか
  0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc.
*}
{if $var is even by 2}
   ...
{/if}

{* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *}
{if $var is even by 3}
   ...
{/if}

  

Example 7.16. {if} のその他の例

 
{if isset($name) && $name == 'Blog'}
     {* 何かを行います *}
{elseif $name == $foo}
    {* 何かを行います *}
{/if}

{if is_array($foo) && count($foo) > 0)
    {* foreach ループを実行します *}
{/if}