首页 » 资讯中心 » 文档

ThinkTemplate 模板条件判断语句(if 标签)

文档 作者:求元工坊 发布时间:2026-10-16 阅读:24

在制作模板时,经常需要根据字段值是否符合某个条件,输出不同的显示效果。这时候就可以使用条件判断标签 {if}。

if 标签 | 条件判断

ThinkTemplate 的 if 标签用于在模板中实现条件分支逻辑,支持单条件、多条件及嵌套判断。

一、基本语法

1.1 最简单的 if 判断

{if condition="($item['status'] eq 1)"}
  <span class="badge-success">已发布</span>
{/if}

注解:当 status 等于 1 时,输出"已发布"标签。

1.2 if...else... 判断

{if condition="($item['status'] eq 1)"}
  <span class="badge-success">已发布</span>
{else /}
  <span class="badge-secondary">草稿</span>
{/if}

注解:条件成立输出"已发布",否则输出"草稿"。

1.3 if...elseif...else... 多重判断

{if condition="($item['status'] eq 1)"}
  <span class="badge-success">已发布</span>
{elseif condition="$item['status'] eq 0" /}
  <span class="badge-warning">待审核</span>
{elseif condition="$item['status'] eq 2" /}
  <span class="badge-danger">已驳回</span>
{else /}
  <span class="badge-secondary">未知状态</span>
{/if}

注解:支持任意多个 elseif 分支,按顺序匹配,命中即执行对应代码块。

二、条件表达式运算符

在 condition 属性中,必须使用字母形式的比较运算符,不能使用 <、> 等符号(会混淆模板解析)。

含义运算符示例
等于eq{$item['status'] eq 1}
不等于neq{$item['status'] neq 0}
大于gt{$item['views'] gt 100}
小于lt{$item['views'] lt 100}
大于等于egt{$item['views'] egt 100}
小于等于elt{$item['views'] elt 100}
恒等于heq{$item['type'] heq 'article'}
不恒等于nheq{$item['type'] nheq 'gallery'}
或OR 或 ||($a eq 1) OR ($b eq 2)
且AND 或 &&($a eq 1) AND ($b eq 2)

三、常用判断场景

3.1 判断字段是否为空

{if condition="!empty($item['cover'])"}
  <img src="{$item['cover']}" alt="{$item['title']}">
{else /}
  <div class="no-img">暂无封面</div>
{/if}

注解:使用 empty() 判断字段是否为空,常用于封面图、摘要等可选字段。

3.2 判断列表是否有数据

{if condition="!empty($list)"}
  {volist name="list" id="item"}
    ... 渲染列表 ...
  {/volist}
{else /}
  <div class="empty-state">暂无数据</div>
{/if}

3.3 多条件组合判断

{if condition="($item['status'] eq 1) AND ($item['is_top'] eq 1)"}
  <span class="badge-top">置顶推荐</span>
{elseif condition="$item['status'] eq 1" /}
  <span class="badge-normal">已发布</span>
{/if}

注解:使用 AND 组合多个条件,实现更精细的分支控制。

3.4 循环体内条件判断

{volist name="list" id="item" key="k"}
  {if condition="$k eq 1"}
    <div class="item first">  <!-- 第一条特殊样式 -->
  {elseif condition="$k eq count($list)" /}
    <div class="item last">   <!-- 最后一条特殊样式 -->
  {else /}
    <div class="item">
  {/if}
    <h3>{$item['title']}</h3>
  </div>
{/volist}

注解:在 volist 循环中使用 if,根据序号给不同条目添加不同样式。

3.5 判断当前页码

{if condition="$pagination['currentPage'] gt 1"}
  <a href="?page={$pagination['currentPage']-1}">上一页</a>
{/if}

<span>第 {$pagination['currentPage']} / {$pagination['lastPage']} 页</span>

{if condition="$pagination['currentPage'] lt $pagination['lastPage']"}
  <a href="?page={$pagination['currentPage']+1}">下一页</a>
{/if}

注解:仅在非第一页显示"上一页",仅在非最后一页显示"下一页"。

四、注意事项

  1. condition 属性中必须使用字母运算符(eq、gt、lt 等),不能使用 <、>、= 符号,否则会与模板解析冲突。
  2. 条件表达式中的字段访问必须使用数组下标语法 {$item['field']},不支持点语法 {$item.field}。
  3. 字符串比较请用引号包裹,如 $item['type'] eq 'article'。
  4. 多条件组合时,建议用圆括号明确优先级,如 ($a eq 1) AND ($b eq 2)。
  5. elseif 和 else 必须写在 {/if} 之前,且 elseif 可多次使用,else 最多一次。

五、与 PHP 原生 if 的区别

特性ThinkTemplate ifPHP 原生 if
语法格式{if condition="..."}{/if}<?php if (...) { ?>
比较运算符字母形式(eq、gt、lt)符号形式(==、>、<)
字段访问数组下标 {$item['field']}任意 PHP 表达式
解析时机模板编译时运行时
适用场景视图层展示逻辑业务逻辑、数据处理

本文档适用于求元工坊CMS v1.0 及以上版本。更多模板语法请参考 ThinkTemplate SSR 数据渲染指南 和 模板算术运算符使用指南。