块标签与循环字段(全表)
全部 16 个块标签的属性,以及每一个的循环体里能取到哪些字段。
块标签成对出现,中间那段会按标签的规则重复(或按条件显示)。
循环体里取值用固定的作用域前缀:{naicha:list} 里写 {list.title},
{naicha:shop} 里写 {shop.title} —— 前缀写错就是空串(不报错)。
一、条件:{naicha:if}
{naicha:if var="shopItem.buyable" eq="1"}…{naicha:else}…{/naicha:if}
| 属性 | 含义 |
|---|---|
var | 要判断的变量(可带作用域前缀,如 list.thumb_url) |
eq / neq | 等于 / 不等于(按字符串比) |
gt / lt | 大于 / 小于(按数值比) |
in | 在逗号分开的一组值里,如 in="a,b,c" |
empty / notempty | 为空 / 不为空(notempty="1") |
| 什么都不写 | 按真假判断(就是 PHP 的 (bool)) |
不压作用域:{naicha:if} 只是 PHP 的 if,所以它可以嵌在任何地方,
包括嵌在别的 {naicha:if} 里(含带 else 的),也可以直接写在 HTML 属性中间。
这几条都实测过,见「套标签与失败模式」。
二、内容列表:{naicha:list}
{naicha:list cid="3" num="10" page="{naicha:param name='page'}" order="publish desc"}
<a href="{list.url}">{list.title}</a>
{/naicha:list}
| 属性 | 默认 | 含义 |
|---|---|---|
cid | 当前栏目 | 栏目 id |
name | — | 栏目别名(推荐,比写死 id 好)。只有 cid 和 name 都没写时才继承当前栏目 |
num | 10 | 每页条数(上限 100) |
page | 当前页 | 页码,通常写 {naicha:param name='page'} |
order | sort desc | 排序键,见下表 |
keyword | 搜索词 | 关键词搜索 |
model | — | 只取某个内容模型的内容(如 media) |
top | — | 只看置顶(1) |
tag / tags / tagmode | — | 按标签筛;tags="a,b" 多标签,tagmode="and"(默认)/ or |
field op fvalue | — | 按自定义字段筛(op 是比较方式) |
withsub / sub | — | 连子栏目一起取 |
media | — | 顺带取图集(列表页每行多一个 {list.gallery}) |
filters | — | filters="1" 表示这个列表接受 URL 上的筛选(排序/时间/标签)。侧栏那种局部列表不要开 |
kwscope | 站点设置 | 搜索范围(标题摘要 / 含正文) |
排序键(写错的会静默回落到 sort desc)
sort desc sort asc publish desc publish asc
hits desc id desc id asc relevance(只在带 keyword 时有意义)
循环体里能用的字段(都写 {list.…})
| 字段 | 说明 |
|---|---|
id cid model title alias | 基本列 |
summary | 摘要;没填过会自动从正文截前 120 字 |
content | 正文 HTML。输出必须写 html="1",否则会被转义成源码 |
url | 详情页地址(已带语言前缀) |
hits top sort status publish_time author_id lang | 其余列 |
thumb_url / has_thumb | 封面图地址(没图时是空串)与配套开关。用手拼 /{list.thumb} 在多级地址下会把图路径拼错 |
is_new | 1/0,7 天内发布 |
ext.… 或直接写字段名 | 自定义字段。引擎在找不到同名字段时会自动回落到扩展字段,所以 {list.media_type} 与 {list.ext.media_type} 等价 —— 前者更好写 |
gallery / has_gallery | 仅在带了 media 属性时才有 |
三、栏目:{naicha:sort}、{naicha:nav}
| 标签 | 属性 | 作用与字段 |
|---|---|---|
{naicha:sort} | id(默认当前栏目) |
取一个栏目。行内写 {sort.name} {sort.intro} {sort.url} {sort.alias} {sort.cover} {sort.seo_title} {sort.seo_keywords} {sort.seo_desc} {sort.type} {sort.template}。取不到栏目时整块不输出 |
{naicha:nav} | num(默认 20) |
顶级栏目树。行内同 sort 的字段,另有 {nav.children}(子栏目数组,再套一层 {naicha:loop from="nav.children" as="c"}) |
{naicha:navs} | type(top/foot)、num |
后台自定义的导航条。行内写 {navitem.name} {navitem.url} {navitem.target} {navitem.type} {navitem.sort} |
四、内容详情:{naicha:detail}
{naicha:detail}
<h1>{detail.title}</h1>
<div>{detail.content html="1"}</div>
{/naicha:detail}
属性:id 或 alias(都不写就用路由里那一条)。取不到内容时整块不输出。
行内字段 = {naicha:list} 的全部字段,另加:
{detail.cats}(所属栏目数组)、{detail.model_label}(内容模型的中文名)、
{detail.gallery}、{detail.rel}(关联内容数组)。
五、会员:{naicha:user}
只有 logged / id / username / role / nickname 这几个字段
(来自登录时写进会话的那一份)。未登录时 logged='0'、nickname='访客'。
判断登录必须用 eq="1":写成 notempty 的话,未登录时 '0' 也是个非空字符串,判断永远为真。
六、取数据的其它块标签
| 标签 | 属性 | 循环字段(前缀) |
|---|---|---|
{naicha:banners} | num、group(默认 home,留空取全部) |
{banner.title} {banner.subtitle} {banner.image} {banner.url} {banner.btn_text} {banner.group_key} |
{naicha:links} | num |
{link.name} {link.url} {link.logo} |
{naicha:merchants} | num、featured(1 只取首页推荐) |
见「商城与商家标签」那一篇(字段较多,含三级回落的 show_name/show_logo/show_shot) |
{naicha:shop} | num、cid、order |
见「商城与商家标签」那一篇 |
{naicha:tags} | cid(该栏目常用标签)或 content_id(某篇的标签),num |
{tag.name}(进 /tag/ 地址要写 {tag.name urlencode="1"})、{tag.count} |
{naicha:rel} | num、content_id、type(默认 related) |
{rel.title} {rel.url} {rel.summary} {rel.id} |
{naicha:gallery} | content_id、kind(默认 gallery)、num |
{photo.url} {photo.path} {photo.alt} {photo.index}(从 1 开始) |
{naicha:form} | name(默认 contact) |
后台定义过这个表单时直接输出整张表单(循环体被忽略);没定义时退回内置表单,循环体里可用 {form.name} {form.action} |
{naicha:loop} | from(变量名或 作用域.字段)、as(行变量名) |
通用循环。from="lang.list" 这种二维路径也支持。行内可用 {行名.key} {行名.value},关联数组还直接按字段名取 |
