Smarty における {if} ステートメントは、PHP の
if と同等の柔軟性を持っています。
さらに、テンプレートエンジンのための機能をいくつか追加しています。
全ての {if} は、対応する
{/if} とペアである必要があります。{else}
と {elseif} も使用できます。
|| や or、
&&、and、
is_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}