首页 / 开发文档 / 商城与商家标签

商城与商家标签

{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}

参数

参数默认说明
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

标签外可用的两个变量

  • {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。

改了模板不生效?模板是按修改时间自动重编译的,正常改完刷新就是新的。 如果确实没变,先清一次后台的「模板缓存」—— 缓存是按主题存的,换主题或改主题目录也可能让它对不上。
没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。