条件判断 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」篇)。