条件判断 If

条件判断 If

{if} 用于按条件渲染内容块,支持任意多个 {elseif} 与一个可选的 {else},以 {/if} 闭合。

一、语法

{if 条件}
    ...
{elseif 其他条件}
    ...
{else}
    ...
{/if}

真实示例:

{if $count > 0 && $user.logged_in}
    <p>欢迎,{$user.name}</p>
{elseif $count > 0}
    <p>共有 {$count} 条</p>
{else}
    <p>暂无数据</p>
{/if}

二、运算符对照表

条件里既可用符号形式,也可用等价的英文词形式(不区分大小写):

符号形式 等价词 含义
== eq 等于
!=、<> ne / neq 不等于
=== — 全等于
!== — 不全等于
> gt 大于
< lt 小于
>= ge / gte 大于等于
<= le / lte 小于等于
&& and 与
\|\| or 或
! not 非
% mod 取模

三、位运算、算术与分组

条件内还支持位运算 & | ^ ~ << >> 与算术 + - * /,并允许用括号分组:

{if ($a + $b) % 2 eq 0}偶数{/if}
{if $flag & 1}最低位为 1{/if}
{if $status eq 1 or ($vip and $score >= 60)}合格{/if}

引擎在编译期会校验括号是否配对,不配对时报 unbalanced parenthesis in if statement。

四、字面量保留词

下列裸词在条件中被当作字面量值,不会被当变量:

true  false  yes  no  on  off  null
{if $enabled eq true}已启用{/if}
{if $mode == 'on'}开启{/if}

五、安全约束:禁止函数调用

{if} 条件里禁止函数调用与变量函数调用,编译期会报错:

{* 错误:函数调用不被允许 *}
{if isset($user)}...{/if}
{if count($list) > 0}...{/if}
{if $fn($x)}...{/if}

替代写法:

{* isset / 非空判断 → 用真值判断 *}
{if $user}...{/if}

{* 需要默认值 → 用 |default 修饰器或先 {assign} *}
{if $title|default:'' != ''}...{/if}

{if} 中不支持 isset();用真值判断或 |default 修饰器替代。

六、嵌套与换行

{if} 可嵌套;块标签必须正确闭合,否则编译期报 mismatched tag。行内写法也支持:

<li{if $cat.cur} class="cur"{/if}>{$cat.name}</li>

这是分类树高亮当前项的常见写法(见「分类树 Category」篇)。

添加日期: