首页 / 建站手册 / 什么时候显示、什么时候不显示(if)

什么时候显示、什么时候不显示(if)

eq / neq / gt / lt / in / empty / notempty 全部比较符,多分支用 elseif,以及能嵌在哪些地方。

适用范围:任意位置。它是语言结构,不是取数标签。

写法与比较符

{naicha:if var="shopItem.buyable" eq="1"}…{naicha:else}…{/naicha:if}
var要判断的变量(可带作用域前缀,如 list.thumb_url)
eq / neq等于 / 不等于(按字符串比)
gt / lt大于 / 小于(按数值比)
gte / lte大于等于 / 小于等于
in在逗号分开的一组值里,如 in="a,b,c"
empty / notempty为空 / 不为空(notempty="1")
什么都不写按真假判断(就是 PHP 的 (bool))

多分支:{naicha:elseif}

三个以上的分支别再叠 {naicha:if}(很容易出现「两个分支同时成立、渲染出两段」), 用 {naicha:elseif}:

{naicha:if var="list.media_type" eq="video"}
  <span class="badge play">▶ {list.duration}</span>
{naicha:elseif var="list.media_type" eq="audio"}
  <span class="badge audio">♪ {list.duration}</span>
{naicha:elseif var="list.media_type" eq="image"}
  <span class="badge pic">图集</span>
{naicha:else}
  <span class="badge">图文</span>
{/naicha:if}

条件属性与 {naicha:if} 完全一样, 靠 {naicha:else} 收尾,最后仍是一个 {/naicha:if} —— elseif 不闭合。

它能嵌在哪

{naicha:if} 只是 PHP 的 if,所以它可以嵌在任何地方 (下面几条都实测过,见「容易踩的坑」):

写法结果
带 else 的 {naicha:if} 里再嵌 {naicha:if}正常
里面再嵌一个带 else 的正常
{naicha:if} 里嵌块标签(如 {naicha:list})正常
HTML 属性中间嵌条件:class="c{naicha:if var="x" eq="1"} on{naicha:else} off{/naicha:if}"正常,会拼出 class="c on" / class="c off"
⚠️ 判断登录 / 开关,必须用 eq="1",不能用 notempty。 未登录时 user.logged 是字符串 '0' —— 非空,notempty 永远为真, 于是访客也会看到「我的账户」。这是本项目最容易踩的一条。
如果你用的是更早的版本,{naicha:elseif} 会被静默吞掉 —— 引擎对认不出的标签一律输出空串,于是那个分支的内容永远不显示, 它后面的 {naicha:else} 还会落进上一个 if 的 else 分支里, 页面 200、没有报错,看着像「排版少了一块」。症状对上时,改写成嵌套的 {naicha:if} 即可。
没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。