什么时候显示、什么时候不显示(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} 即可。
