商城:{naicha:shop}
把商品放到任意页面(首页推荐位、活动页)—— 全部参数、循环字段、排序键,以及一个完整的首页商品区。
适用范围:首页、活动页、商城列表页(shop_list.html)。
为什么需要这个标签
商城默认只有一个商品列表页(/shop)。但「首页放四件推荐商品」「活动页放两件套装」
这类需求非常常见 —— 以前没有标签可用,只能去改 PHP。{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}
参数
num8;取几件,1–60cid0;只看某个栏目下的商品;不传=全部ordersort desc;只能填内置的那几个排序键(见下)循环里能用的字段(一律 {shop.xxx})
title商品标题(就是关联那篇内容的标题)summary一句话简介。可加 excerpt="42" 截断url商品详情页地址price售价,已格式化成 ¥xx.xx,不要再自己拼market划线价;没设或没高于售价时是空串,用之前要判空sold_text「已售 N」;一件没卖出去时是空串stock_text「现货充足」/「库存 N」/「已售罄」thumb_url封面图地址。没图时是空串 —— 别直接塞进 srcbuyable1/0,能不能买(下架或没货就是 0)why不能买的原因(「这件商品已下架」/「暂时没货了」)kindphysical 实物 / virtual 虚拟 / service 服务kind_label上面那个的中文(实物/虚拟/服务)item_id商品行的 id。加购物车这类动作要用它,不是内容 idcontent_id商品关联的那篇内容 id(商品详情页就是这篇)cid商品所在栏目 idsku货号;没填是空串specs规格定义(配的),一般用不上stock / sold库存数 / 已售数,原始数字。要给人看的文案用上面那两个 *_textprice_cents / market_cents售价 / 划线价的分值(要自己算才用;显示一律用 price / market)thumb封面图的相对路径。同 {list.thumb},多层级地址下别直接塞进 srchits publish_time lang浏览量 / 发布时间 / 语言,口径与内容那套一致标签外可用的两个变量
{shopTotal}—— 符合条件的商品总数。写空状态就靠它:{naicha:if var="shopTotal" eq="0"}…{/naicha:if}{shopItems}—— 本次实际取到几件
命名与 {naicha:list} 的 listTotal/listItems 是同一套,
两个标签的写法不用换脑子。
排序只能用内置的键
order 只认这几个(写别的不会报错,会静默回落到 sort desc ——
所以写错了页面上看起来「正常」,只是顺序不对):
sort desc、sort asc、publish desc、publish asc、
hits desc、id desc、id asc。
商城关掉时,
{naicha:shop} 输出空。
模板是站长写死的,关掉商城之后首页上那一节应该自然消失,而不是露出一个空框 ——
所以这里不是「输出 0 件商品的空列表」,而是整块不输出。
把商品放到首页的完整例子
<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。
