首页 / 开发文档 / 块标签与循环字段(全表)

块标签与循环字段(全表)

全部 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 都没写时才继承当前栏目
num10每页条数(上限 100)
page当前页页码,通常写 {naicha:param name='page'}
ordersort 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_new1/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},关联数组还直接按字段名取
没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。