{if},{elseif},{else}

    Smarty中的{if}语句和PHP中的if语句具有相同的灵活性,且为模板引擎增加了一些功能。每个{if}必须以配对的{/if}结束。{else}{elseif}也是可以的。所有的PHP条件和函数都可以同样识别,如||or&&andis_array()等等。

    如果$security是激活的,那么IF_FUNCS数组存在于$security_settings数组中,并指定可以用在if中的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 检查一致性 ===
!notnot $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

例子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}

{* 检查非空 *}
{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}


{*
  测试变量是否按2分组为偶数,即:
  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}
 

例子7-16. {if}的更多范例

{if isset($name) && $name = 'Blog'}
     {* do something *}
{elseif $name == $foo}
    {* do something *}
{/if}

{if is_array($foo) && count($foo) > 0)
    {* do a foreach loop *}
{/if}