首页 / 建站手册 / 商城:{naicha:shop}

商城:{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–60
cid0;只看某个栏目下的商品;不传=全部
ordersort desc;只能填内置的那几个排序键(见下)

循环里能用的字段(一律 {shop.xxx})

title商品标题(就是关联那篇内容的标题)
summary一句话简介。可加 excerpt="42" 截断
url商品详情页地址
price售价,已格式化成 ¥xx.xx,不要再自己拼
market划线价;没设或没高于售价时是空串,用之前要判空
sold_text「已售 N」;一件没卖出去时是空串
stock_text「现货充足」/「库存 N」/「已售罄」
thumb_url封面图地址。没图时是空串 —— 别直接塞进 src
buyable1/0,能不能买(下架或没货就是 0)
why不能买的原因(「这件商品已下架」/「暂时没货了」)
kindphysical 实物 / virtual 虚拟 / service 服务
kind_label上面那个的中文(实物/虚拟/服务)
item_id商品行的 id。加购物车这类动作要用它,不是内容 id
content_id商品关联的那篇内容 id(商品详情页就是这篇)
cid商品所在栏目 id
sku货号;没填是空串
specs规格定义(配的),一般用不上
stock / sold库存数 / 已售数,原始数字。要给人看的文案用上面那两个 *_text
price_cents / market_cents售价 / 划线价的分值(要自己算才用;显示一律用 price / market)
thumb封面图的相对路径。同 {list.thumb},多层级地址下别直接塞进 src
hits 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。

没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。