动态数据源
动态数据源,也叫做 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 |