商城与商家标签
{naicha:shop} 与 {naicha:merchants} 的全部字段、参数,以及怎么把商品放到首页上。
为什么需要商品标签
商城默认只有一个商品列表页(/shop)。但「首页放四件推荐商品」「活动页放两件套装」
这类需求非常常见 —— 以前没有标签可用,只能去改 PHP。{naicha:shop} 就是为这件事加的:
商品能不能出现在某个页面,应该由模板作者决定,而不是由内核决定。
{naicha:shop} —— 取商品
{naicha:shop num="4" order="sort desc"}
<a href="{shop.url}">
<img src="{shop.thumb_url}" alt="{shop.title}">
<h3>{shop.title}</h3>
<p>{shop.summary excerpt="42"}</p>
<span>{shop.price}</span>
</a>
{/naicha:shop}
参数
| 参数 | 默认 | 说明 |
|---|---|---|
num | 8 | 取几件,1–60 |
cid | 0 | 只看某个栏目下的商品;不传=全部 |
order | sort desc | 只能填内置的那几个排序键(见下) |
循环里能用的字段(一律 {shop.xxx})
| 字段 | 是什么 |
|---|---|
title | 商品标题(就是关联那篇内容的标题) |
summary | 一句话简介。可加 excerpt="42" 截断 |
url | 商品详情页地址 |
price | 售价,已格式化成 ¥xx.xx,不要再自己拼 |
market | 划线价;没设或没高于售价时是空串,用之前要判空 |
sold_text | 「已售 N」;一件没卖出去时是空串 |
stock_text | 「现货充足」/「库存 N」/「已售罄」 |
thumb_url | 封面图地址。没图时是空串 —— 别直接塞进 src |
buyable | 1/0,能不能买(下架或没货就是 0) |
why | 不能买的原因(「这件商品已下架」/「暂时没货了」) |
kind | physical 实物 / virtual 虚拟 / service 服务 |
kind_label | 上面那个的中文(实物/虚拟/服务) |
item_id | 商品行的 id。加购物车这类动作要用它,不是内容 id |
标签外可用的两个变量
{shopTotal}—— 符合条件的商品总数。写空状态就靠它:{naicha:if var="shopTotal" eq="0"}…{/naicha:if}{shopItems}—— 本次实际取到几件
命名与 {naicha:list} 的 listTotal/listItems 是同一套,
两个标签的写法不用换脑子。
商城关掉时,
{naicha:shop} 输出空。
模板是站长写死的,关掉商城之后首页上那一节应该自然消失,而不是露出一个空框 ——
所以这里不是"输出 0 件商品的空列表",而是整块不输出。
排序只能用内置的键
order 只认这几个(写别的不会报错,会静默回落到 sort desc ——
所以写错了页面上看起来"正常",只是顺序不对):
sort desc、sort asc、publish desc、publish asc、
hits desc、id desc、id asc。
{naicha:merchants} —— 推荐商家
{naicha:merchants num="8" featured="1"}
<a href="{merchant.url}">{merchant.name}</a>
<img src="{merchant.show_shot}" alt="{merchant.show_name}">
{/naicha:merchants}
featured="1" 只取勾了「首页推荐」的(首页那一节用);不传则取全部显示中的(列表页用)。
| 字段 | 是什么 |
|---|---|
name / show_name | 名称。show_name 是三级回落后的结果:自定义 → 自动抓取的页面标题 → 域名 |
url / host | 网址与它的域名部分 |
intro | 一句话简介(后台自己填的) |
logo / show_logo | 自己上传的 logo;没传时会回落到自动抓到的站点图标 |
show_shot | 主图:自己上传的优先,没传就用在线实时截图 |
hits | 浏览量。只在点「访问网站」时 +1,不是打开详情页就加 |
is_auto / stale | 是不是自动抓来的 / 抓取结果是不是过期了(超过 30 天) |
把商品放到首页的完整例子
<div class="shop-grid">
{naicha:shop num="4" order="sort desc"}
<a class="shop-card" href="{shop.url}">
<div class="shop-thumb">
{naicha:if var="shop.thumb_url" notempty="1"}
<img src="{shop.thumb_url}" alt="{shop.title}" loading="lazy">
{naicha:else}
<span class="shop-noimg">{shop.kind_label}</span>
{/naicha:if}
</div>
<div class="shop-info">
<h3>{shop.title}</h3>
<p class="shop-sum">{shop.summary excerpt="42"}</p>
<div class="shop-foot">
<span class="shop-price">{shop.price}</span>
<span class="shop-sold">{shop.sold_text}</span>
</div>
</div>
</a>
{/naicha:shop}
</div>
这几个 class(shop-grid/shop-card/shop-thumb/
shop-info/shop-foot/shop-price/shop-sold/
shop-noimg)主样式表里都有,直接抄就能用,不用自己写 CSS。
改了模板不生效?模板是按修改时间自动重编译的,正常改完刷新就是新的。
如果确实没变,先清一次后台的「模板缓存」——
缓存是按主题存的,换主题或改主题目录也可能让它对不上。
