Section blocks
Section(区块)可以在它们自己的 schema 中定义 block。你可以用 section block 来在某个特定的 section 里创建可自定义的内容布局。section block 只能用在它定义的那个 section 里,不能嵌套别的 block,也就是说你不能用它来创建层级结构。
想了解更多关于 section block 的内容,可以参考 blocks 属性的官方文档,以及 section schema。
在 section 里定义 block
在你的 section 的 schema 里,加一个 blocks
数组。这个数组里的每个对象都代表一个只属于这个 section 的 block。
下面是一个例子:
{
"name": "Example section",
"blocks": [
{
"type": "heading",
"name": "Heading",
"settings": [
{
"type": "text",
"id": "heading",
"label": "Heading",
"default": "Hello, world!"
}
]
}
]
}
在这个例子里,Example section
包含了一个 Heading
block。这个 block 有以下这些数据:
type
:是 block 的唯一标识符settings
:是一个数组,包含了这个 block 可以自定义的选项
渲染 block
在你 section 的 Liquid 文件中,可以用循环来遍历这个 section 的 block,然后根据 block 的 type 来渲染它。你可以用 block
这个 Liquid tag 来访问 block 的设置。下面是一个例子:
{% for block in section.blocks %}
{%- case block.type -%}
{%- when "heading" -%}
<h1>{{ block.settings.heading }}</h1>
{% endcase %}
{% endfor %}
在这个例子里,for
循环遍历了 section 中的每一个 block,然后通过 block.settings.heading
来输出每个 block 的标题。
注意事项
不要依赖 block 的 ID 的字面值来做逻辑判断。这个 ID 是动态生成的,可能会变。如果你写成下面这样,ID 一变就会导致你的主题功能出错:
{% for block in section.blocks %}
{%- if block.id == 'J6d9jV' -%}
<h1>{{ block.settings.heading }}</h1>
{% endif %}
{% endfor %}