EN
Shopify 知识库 · 指南

Dawn 15.3.0 架构:从商品页进入渲染与交互

Dawn 15.3.0 主题架构:以固定源码从商品页追踪 Layout、模板、分区、片段与浏览器组件的协作,并说明未经店铺验证的范围。
历史资料
请结合文中的适用版本和来源阅读。

本篇研究 Shopify Dawn 的 v15.3.0,固定到 commit ecb06c31f1423fced1b3ea6ef7e1cb2143f04e47。它解释这个版本的源码关系,不代表 Dawn 最新版,也不用于推断 Horizon 的实现。源码基线。

从一个商品页进入

可以沿以下关系阅读,而不是按目录顺序逐个背文件名:

层次这个版本的入口需要理解的关系
页面框架layout/theme.liquid加载通用脚本,插入 header/footer 分区组和模板内容
商品模板templates/product.json用 main-product 分区组织商品页,并记录区块顺序
商品分区sections/main-product.liquid按区块类型输出价格、选择器、数量和购买内容
复用片段snippets/为多个入口复用局部呈现;具体调用以 render 为准
浏览器行为assets/global.js、assets/product-info.js数量控件、变体与商品信息更新等交互

以上入口逐个核对了固定版本的文件。可直接查看布局、商品模板与商品分区。

商品数据与商家配置交汇在哪里

商品模板决定页面使用哪些分区与区块;分区中的 Liquid 同时读取商品数据和配置。商品名称、选中变体的数量规则与区块排列,不是同一来源。

例如,模板包含 quantity_selector 区块,分区 schema 允许这种区块并设置数量上限为一个;但购买数量的 min、max、increment 来自变体规则,并不是这个区块中的三个商家输入设置。这里说的“一个”是区块实例限制,不是购买件数上限。

因此,改变区块位置属于页面组成;改变商品允许的数量属于商品规则;改变加减按钮的交互属于浏览器代码。先明确任务发生在哪一层,再修改对应入口。

浏览器交互不是只有一个文件

global.js 注册 quantity-input 自定义元素,负责输入和按钮的基本交互。product-info.js 的 setQuantityBoundries 则结合购物车中的数量调整输入边界,并发布数量更新事件。只读基本控件,不能完整解释商品页在变体或购物车变化后的行为。

数量选择器案例将这两层分开,并给出独立浏览器实验。商品表单的提交另由product-form.js处理,不能把数量按钮的点击当成已完成加购。

从阅读转为一次定制

先选一个实际目标,例如修改数量区域的说明或交互。记录商品页效果、后台可配置项、相关文件和数据来源,再列出长文案、空值、多个实例以及数量边界的验证条件。

不要先修改全局文件再寻找影响面;公共控件还可能被购物车或批量订购界面使用。将定制限制在明确入口后,再回到其他调用方检查回归。

已验证与未覆盖

本篇已核对固定版本的源码关系,并在独立 HTML 夹具中验证数量控件行为。未执行 Shopify 服务端 Liquid 渲染、主题编辑器操作、变体切换、购物车请求或付款测试。完整店铺验收仍应按购买验证流程保留证据。

源码基线