动态数据源
动态数据源,也叫做 dynamic sources,允许商家将输入设置连接到来自资源的数据,比如 products、collections、blogs 和 pages,以及 metafields 和 metaobjects。
动态数据源是通过 section 和 block 的设置来连接的。商家可以在 主题编辑器中进行这些连接。
一个 dynamic source 可以是以下两种之一:
注意
动态数据源不适用于通用的主题设置。
动态数据源类型的可用性
Shopify 根据以下因素来决定每个可用动态数据源类型的值:
- section 所在模板关联的资源
- 当前设置上下文中的资源设置
- 任何具有 storefront 可见性且字段兼容的 metaobjects
- 品牌属性
- 针对市场的 metafields 和 metaobjects
Shopify 如何判断可用的值:
| 条件 | 描述 |
|---|---|
section 是 product 模板 的一部分 |
与该产品相关的 metafields 和 attributes 将适用于以下内容:• section 的设置• section 内任意 block 的设置 |
section 包含一个 collection 类型的设置 |
与该 collection 相关的 metafields 和 attributes 将适用于以下内容:• section 的设置• section 内任意 block 的设置 |
Theme Blocks 中的 product 类型设置 |
Theme Blocks 会访问与指定类型资源最接近的 资源,在这个场景下是最近的 product 类型设置。 |
section 的 blocks 包含一个 product 类型设置 |
与该 product 相关的 metafields 和 attributes 将适用于该 block 的设置。 |
全局可用的 metaobjects |
具有 storefront 可见性的 metaobjects 可以作为任何主题设置的动态数据源使用。 |
可用的 Shopify 资源和属性
以下表格列出了可用的 Shopify 资源及其关联的属性:
可用资源及其属性
| 资源 | 属性 |
|---|---|
| product | title, vendor, description, url, featured_image, collections (collection) |
| collection | title, image, description, url, products (product) |
| page | title, url, content |
| article | title, url, author, content, excerpt, comments_count, image |
| blog | title, url |
注意
将来会有更多资源和资源属性可用。
Metafield 与输入设置的兼容性
Metafields 允许商家定义 自定义数据。这些 metafields 可以通过主题编辑器中的设置连接到 section 和 block。
| 设置 | Metafield 类型 | 验证选项 |
|---|---|---|
collection |
collection_reference |
|
collection_list |
||
list.collection_reference |
||
color |
||
image_picker |
||
file_reference |
||
page |
||
page_reference |
||
product |
||
product_reference |
||
product_list |
||
list.product_reference |
||
richtext |
||
single_line_text_field |
||
list.single_line_text_field |
||
multi_line_text_field |
||
rich_text_field |
||
number_integer |
||
number_decimal |
||
date |
||
date_time |
||
weight |
||
volume |
||
dimension |
||
rating |
||
money |
||
link |
||
inline_richtext |
||
text |
||
url |
必须是视频文件类型 | |
video |
||
file_reference |
||
metaobject |
||
metaobject_reference |
必须与设置 schema 中的 metaobject 类型一致 | |
metaobject_list |
必须与设置 schema 中的 metaobject 类型一致 | |
list.metaobject_reference |
必须与设置 schema 中的 metaobject 类型一致 |
引用 metaobject 字段
你可以使用动态数据源将 metaobject 字段连接到设置。Metaobjects 可以通过以下两种方式被引用:
- 当 metaobject 拥有 storefront 可见性和兼容字段时,直接作为动态数据源(也叫做全局可用 metaobject)
- 通过一个
metaobject_reference类型的 metafield
选择 metaobject 作为动态数据源时,用户可以选择任何与设置类型兼容的字段。例如,如果一个 metaobject 有一个 text 字段和一个 image 字段,一个 text 类型的设置可以使用 text 字段作为动态数据源,而一个 image_picker 设置则可以使用 image 字段。
如果是 list.metaobject_reference 的情况,资源关联的多个 metaobject 条目将被遍历,并显示每个 metaobject 中选定字段的值。结果将以选定字段类型的列表形式展示。例如,如果选定的 metaobject 字段是 single_line_text_field 类型,那么结果将以 list.single_line_text_field 返回。
示例
一个商家有一个 list.metaobject_reference 类型的 metafield,它引用了一个 Materials metaobject。每个 metaobject 都有一个叫做 Material name 的字段。
你可以在 Metafields 区域将材料名称分配给产品:

在在线商店编辑器中,任何支持 list.single_line_text_field 的设置(比如 rich text 字段)都可以使用动态数据源选择 Material name 字段作为文本来源:

这会输出当前产品关联的材料名称列表:

默认值
你可以配置一个设置的默认值来引用一个动态数据源。但是,只建议在 section 或 block 渲染上下文中有该动态数据源值时这么做。例如,不要在以下场景使用与 product 有关的值:
- 可以在非 product 模板中渲染的 section
- 没有显式设置
product类型设置来提供必要值的 section
注意
这也适用于 presets 中的设置值。
使用这种方式时不支持额外的 Liquid,因此你只能直接引用值。如果你加入了额外的 Liquid 语法,将会报错。
下面是一个引用动态数据源的 default 设置示例:
{"type": "text","id": "featured_product_title","label": "Featured product title","default": "Featuring: {{ product.title }}"}
限制
Shopify 对你在主题中不同区域使用动态数据源的数量有限制。这样做是为了保持主题性能良好。
动态数据源限制
| 描述 | 限制 |
|---|---|
| 一个 JSON 模板 中的动态数据源数量 | 100 |
| 通用主题设置 中的动态数据源数量 | 100 |
| 一个 section group 中的动态数据源数量 | 100 |
| 单个设置中的动态数据源数量 | 50 |
| 一个 静态 section 中的动态数据源数量 | 50 |
