分区组

分区组是一个 JSON 数据文件,其中存储了要呈现的分区和应用程序块列表及其相关设置。商家可以在主题编辑器中向分区组添加分区,以及删除和重新排序。

你可以在布局文件中添加对分区组的引用,以便在布局控制的区域(如页眉或页脚)添加对分区的支持。

分区组中引用的分区和应用块会按照 order 属性指定的顺序呈现,分区之间不会有标记。分区组最多可渲染25 个分区,每个分区最多可包含 50 个块。

分区组中引用的分区和应用块与模板中引用的分区和应用块相同,并应遵循相同的准则。
你可以在布局中使用分区组代替静态分区。

提示
在大多数主题中,你应该只为页眉和页脚使用分区组。如果为主题的其他区域(如导航侧边栏)创建了额外的分区组,则应为部分区命名,以反映其预期目的。

位置

分区组文件位于主题的sections目录中:

└─ theme
    ...
    ├─ layout
    │  └─ theme.liquid
    ├─ sections
    │  ├─ footer-group.json
    │  ├─ header.liquid
    │  ├─ header-group.json
    │  └─ ...
    ...

Schema

分区组必须是有效的 JSON 文件。应该是一个具有以下属性的对象:

属性类型是否必须描述
typeString分区组的类型。
可接受的值:
页眉
页脚
边栏
自定义类型,格式为 custom.<name>,其中<name>是栏目组类型的唯一标识符。
nameString分区组的名称。
最大长度: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>Booleantrue时,该部分不会渲染,但仍可在主题编辑器中自定义。默认为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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注