JSON templates

JSON templates 允许你使用 sections 来控制在线店铺不同页面的展示。

JSON templates 是存储要渲染的 sections 列表机器相关配置的数据文件。商家可以使用主题编辑器添加、删除和重新排序这些 sections。

当使用 JSON templates 渲染页面时,sections 会按照 order 属性指定的顺序渲染,sections 之间没有 HTML。JSON templates 最多可以渲染 25 个 section。

虽然 JSON templates 在内容上与 HTML 模板不同,但它们仍然是支持以下 SHOPLINE 主题功能的模板文件:

在构建 JSON templates 时,你还应该构建一个包含模板核心功能的 section。例如,在构建 collections_all JSON templates 时,它应该引用一个使用 collections object 的 section。


Schema

JSON templates 必须是一个有效的 JSON 文件。根对象应包含以下属性:

属性名称类型是否必填描述
nameString页面的文件名称,例如:index.html
layoutString or false渲染模板时要使用的 layout 文件名。例如,指定 "full-width" 以渲染 layout/full-width.html。

默认布局是 layout/theme.html

使用 false 会直接使用 layout/theme.html 进行布局。
wrapperString包裹 section 的 HTML 元素。了解更多,请参阅 wrapper 属性
sectionsObject一个使用 section ID 作为键,section 数据作为值的对象。此属性需要至少包含一个 section。

模板中不允许有重复的 ID。

section 数据的格式与 config/settings_data.json 中的 section 数据相同。了解更多,请参阅 sections data
orderArray按渲染顺序列出的 section ID 数组。ID 必须存在于 sections 对象中。不允许重复。
提示

Section 文件必须在其 schema 中定义 presets,以支持通过主题编辑器添加到 JSON templates 中。 没有 presets 的 section 文件应手动包含在 JSON 文件中,且不能通过主题编辑器移除。

命名 JSON 模板

文件名必须是有效的主题模板类型,可以有可选的后缀来表示备用模板。例如,商品集合模板可以命名为 collection.jsoncollection.alternate.json

一个模板只能存在为 JSON 或 HTML 模板,可以同时存在,当二者同时存在时,优先使用 JSON 模板。

wrapper 属性

wrapper 属性可以在 JSON templates 中的所有 sections 包裹一层 HTML 标签。

例如,具有以下 wrapper 属性的 JSON 文件会生成如下输出:

{
"wrapper": "div#div_id.div_class[data-video=value]",
"sections": {
"video": {
"type": "video"
}
},
"order": [
"video"
]
}
<div id="div_id" class="div_class" data-video="value">
<!-- index.json sections -->
</div>

Section 数据

JSON templates 的 sections 属性包含模板要渲染的 section 的数据。这些 section 可以是主题 sectionsapp sections

JSON 主题模板之间不能共享 section 数据,因此每个 section 在模板内必须有唯一的 ID。

JSON templates 最多可以渲染 25 个 section。

你可以通过代码或主题编辑器向模板中添加 sections。

下表概述了 sections 的配置项及说明。

类型是否必填描述
<SectionID>String-section 的唯一 ID,仅接受字母、数字字符组合。
<SectionType>String要渲染的 section 文件名,不含扩展名。
<SectionDisabled>Boolean如果值为 true,则该 section 不会渲染,但可以在主题编辑器中进行自定义。默认值为 false
<BlockID>String-block 的唯一 ID,仅接受字母、数字字符组合。
<BlockType>String要渲染的 block 类型,在 section 文件的 schema 定义中可以找到。
<BlockOrder>Arrayblock ID 的数组,按渲染顺序排列。ID 必须存在于 blocks 对象中,且不允许重复。
<SettingID>String-section 或 block 的 schema 中定义的 setting ID。
<SettingValue>(multiple)-对应 setting 的有效值。

例如:

sections: {
<SectionID>: {
"type": <SectionType>,
"disabled": <SectionDisabled>,
"settings": {
<SettingID>: <SettingValue>
},
"blocks": {
<BlockID>: {
"type": <BlockType>,
"settings": {
<SettingID>: <SettingValue>
}
}
},
"block_order": <BlockOrder>
}
}

例如:以下模板在商品详情页面上渲染了 product-preview.htmlrecently-viewed.html 的 section 文件:

{
"name": "products/detail.html",
"wrapper": "div#page-product-detail",
"sections": {
"product-preview": {
"type": "product/detail/product-preview",
"disabled": false,
"settings": {
"default_selected_sku": true
},
"blocks": {
"block-1": {
"type": "title",
"settings": {}
},
"block-2": {
"type": "abstract",
"settings": {}
}
},
"block_order":["block-1","block-2"]
},
"recently-viewed":{
"type": "product/recently-viewed",
"settings": {
"show_product_number": 6,
"product_image_ratio": "0"
}
}
},
"order": ["product-preview", "recently-viewed"]
}
注意

任何包含在模板中的非 app sections 的 sections 必须存在于主题中。如果不存在,则会导致错误。

这篇文章对你有帮助吗?