分区组是一个 JSON 数据文件,其中存储了要呈现的分区和应用程序块列表及其相关设置。商家可以在主题编辑器中向分区组添加分区,以及删除和重新排序。
你可以在布局文件中添加对分区组的引用,以便在布局控制的区域(如页眉或页脚)添加对分区的支持。
分区组中引用的分区和应用块会按照 order 属性指定的顺序呈现,分区之间不会有标记。分区组最多可渲染25 个分区,每个分区最多可包含 50 个块。
分区组中引用的分区和应用块与模板中引用的分区和应用块相同,并应遵循相同的准则。
你可以在布局中使用分区组代替静态分区。
提示
在大多数主题中,你应该只为页眉和页脚使用分区组。如果为主题的其他区域(如导航侧边栏)创建了额外的分区组,则应为部分区命名,以反映其预期目的。

位置
分区组文件位于主题的sections
目录中:
└─ theme
...
├─ layout
│ └─ theme.liquid
├─ sections
│ ├─ footer-group.json
│ ├─ header.liquid
│ ├─ header-group.json
│ └─ ...
...
Schema
分区组必须是有效的 JSON 文件。应该是一个具有以下属性的对象:
属性 | 类型 | 是否必须 | 描述 |
type | String | 是 | 分区组的类型。 可接受的值: 页眉 页脚 边栏 自定义类型,格式为 custom.<name>,其中<name>是栏目组类型的唯一标识符。 |
name | String | 是 | 分区组的名称。 最大长度:50 个字符 |
sections | 对象 | 是 | 以分区 ID 为键、以分区数据为值的对象。该属性可以留空。 模板内不允许有重复的 ID。 部分数据的格式与 settings_data.json 中的部分数据相同。JSON 模板最多可呈现 25 个部分,每个部分最多可有 50 个块。 |
order | 数组 | 是 | 按渲染顺序排列的分区ID 数组。ID 必须存在于分区对象中。此属性可以留空。不允许有重复的 ID。 |
{
"type": "header",
"name": "Header Group",
"sections": {
"header": {
"type": "header",
"settings": {}
}
},
"order": ["header"]
}
分区数据
分区组的分区属性包含分区组所要渲染的分区数据。这些分区可以是主题分区,也可以是应用程序分区。你不能在各分区组之间共享部分数据,因此每个分区都必须有一个在分区组内唯一的 ID。
分区组最多可以呈现 25 个分区,每个分区最多可以有 50 个区块。
你可以在代码中或通过主题编辑器向组添加分区。
下表概述了分区数据的格式:
值 | 类型 | 必须 | 描述 |
<SectionID> | String | – | 分区的唯一 ID。只接受字母数字字符。 |
<SectionType> | String | 是 | 要渲染的分区文件的文件名,不含扩展名。 |
<SectionDisabled> | Boolean | 否 | 为true 时,该部分不会渲染,但仍可在主题编辑器中自定义。默认为false 。 |
<BlockID> | String | – | 区块的唯一 ID。只接受字母数字字符。 |
<BlockType> | String | 是 | 要渲染的块类型,如分区文件schema中所定义。 |
<BlockOrder> | 数组 | 否 | 块 ID 的数组,按照它们应该渲染的顺序排列。ID 必须存在于块对象中,不允许重复 ID。 |
<SettingID> | String | – | 分区或块schema中定义的设置 ID。 |
<SettingValue> | (multiple) | – | 设置的有效值 |
例如
sections: {
<SectionID>: {
"type": <SectionType>,
"disabled": <SectionDisabled>,
"settings": {
<SettingID>: <SettingValue>
},
"blocks": {
<BlockID>: {
"type": <BlockType>,
"settings": {
<SettingID>: <SettingValue>
}
}
},
"block_order": <BlockOrder>
}
}
例如,下面的分区组渲染了 quick-links 和 newsletter-signup 分区文件:
{
"type": "footer",
"name": "Footer group",
"sections": {
"quick-links": {
"type": "quick-links",
"settings": {}
},
"newsletter-signup": {
"type": "newsletter-signup",
"settings": {}
}
},
"order": [
"newsletter-signup",
"quick-links"
]
}
注意事项
包含在分区组中的任何分区,如果不是应用程序分区,则必须存在于主题中。如果不存在的分区在分区组中被引用,则会导致错误。
应用
在使用分区组时,应熟悉在布局中包含分区组的过程,以及在布局中同时使用分区组和静态分区的注意事项。
你也可以选择使用分区组来渲染模板内容。
情景分区组
当商家为特定的买家应用分区组时,就会创建情景分区组文件。该文件名称示例:header-group.context.<context-string>.json。
情景分区组会根据情景覆盖掉分区住。情景和父文件在模板顶部定义。context值可以包含 “market”、”market-handle “或 “b2b”:true。例如,以下代码将公告栏分区使用market:ca进行情景化:
{
"context": {
"market": "ca"
},
"parent": "header-group.json",
"sections": {
"announcement-bar": {
"blocks": {
"announcement-bar-one": {
"settings": {
"text": "Free shipping for Canada!"
}
}
},
"settings": {
"change_slides_speed": 5
}
}
}
}
在布局文件中包含分区组
使用 sections Liquid 标签可将分区组显示为主题布局内容的一部分。将 sections 标签放置在布局中需要呈现它的位置。
sections Liquid 标签使用以下语法,其中<filename>
是分区组的名称,不含文件扩展名:
{% sections '<filename>' %}
例如,如果您有一个 /sections/header-group.json 文件,其中包含主题的页眉内容,如页眉部分和公告栏分区,那么您可能想在 theme.liquid 中包含该分区组,这样页眉分区组就会呈现在使用该布局的所有页面上:
{% sections 'header-group' %}
静态分区和分区组共存
避免在同一布局文件中同时使用分区组和静态分区。如果需要同时使用,则应在分区名称中标明哪些是静态章节。
原文:https://shopify.dev/docs/themes/architecture/section-groups
发表回复