Section blocks

Section(区块)可以在它们自己的 schema 中定义 block。你可以用 section block 来在某个特定的 section 里创建可自定义的内容布局。section block 只能用在它定义的那个 section 里,不能嵌套别的 block,也就是说你不能用它来创建层级结构。

想了解更多关于 section block 的内容,可以参考 blocks 属性的官方文档,以及 section schema

在 section 里定义 block

在你的 section 的 schema 里,加一个 blocks 数组。这个数组里的每个对象都代表一个只属于这个 section 的 block。

下面是一个例子:

  1. {
  2. "name": "Example section",
  3. "blocks": [
  4. {
  5. "type": "heading",
  6. "name": "Heading",
  7. "settings": [
  8. {
  9. "type": "text",
  10. "id": "heading",
  11. "label": "Heading",
  12. "default": "Hello, world!"
  13. }
  14. ]
  15. }
  16. ]
  17. }

在这个例子里,Example section 包含了一个 Heading block。这个 block 有以下这些数据:

  • type:是 block 的唯一标识符
  • settings:是一个数组,包含了这个 block 可以自定义的选项

渲染 block

在你 section 的 Liquid 文件中,可以用循环来遍历这个 section 的 block,然后根据 block 的 type 来渲染它。你可以用 block 这个 Liquid tag 来访问 block 的设置。下面是一个例子:

  1. {% for block in section.blocks %}
  2. {%- case block.type -%}
  3. {%- when "heading" -%}
  4. <h1>{{ block.settings.heading }}</h1>
  5. {% endcase %}
  6. {% endfor %}

在这个例子里,for 循环遍历了 section 中的每一个 block,然后通过 block.settings.heading 来输出每个 block 的标题。

注意事项

不要依赖 block 的 ID 的字面值来做逻辑判断。这个 ID 是动态生成的,可能会变。如果你写成下面这样,ID 一变就会导致你的主题功能出错:

  1. {% for block in section.blocks %}
  2. {%- if block.id == 'J6d9jV' -%}
  3. <h1>{{ block.settings.heading }}</h1>
  4. {% endif %}
  5. {% endfor %}