动态数据源

动态数据源,也叫做 dynamic sources,允许商家将输入设置连接到来自资源的数据,比如 products、collections、blogs 和 pages,以及 metafields 和 metaobjects。

动态数据源是通过 section 和 block 的设置来连接的。商家可以在 主题编辑器中进行这些连接

一个 dynamic source 可以是以下两种之一:

注意

动态数据源不适用于通用的主题设置。

动态数据源类型的可用性

Shopify 根据以下因素来决定每个可用动态数据源类型的值:

  • section 所在模板关联的资源
  • 当前设置上下文中的资源设置
  • 任何具有 storefront 可见性且字段兼容的 metaobjects
  • 品牌属性
  • 针对市场的 metafields 和 metaobjects

Shopify 如何判断可用的值:

条件 描述
sectionproduct 模板 的一部分 与该产品相关的 metafieldsattributes 将适用于以下内容:
section 的设置
section 内任意 block 的设置
section 包含一个 collection 类型的设置 与该 collection 相关的 metafieldsattributes 将适用于以下内容:
section 的设置
section 内任意 block 的设置
Theme Blocks 中的 product 类型设置 Theme Blocks 会访问与指定类型资源最接近的 资源,在这个场景下是最近的 product 类型设置。
sectionblocks 包含一个 product 类型设置 与该 product 相关的 metafieldsattributes 将适用于该 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 类型是兼容的:

设置 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 可以通过以下两种方式被引用:

  1. 当 metaobject 拥有 storefront 可见性和兼容字段时,直接作为动态数据源(也叫做全局可用 metaobject)
  2. 通过一个 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 区域将材料名称分配给产品:

metafield card with materials

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

dynamic source popover with metaobject

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

list of material names in theme

默认值

你可以配置一个设置的默认值来引用一个动态数据源。但是,只建议在 section 或 block 渲染上下文中有该动态数据源值时这么做。例如,不要在以下场景使用与 product 有关的值:

  • 可以在非 product 模板中渲染的 section
  • 没有显式设置 product 类型设置来提供必要值的 section

注意

这也适用于 presets 中的设置值。

使用这种方式时不支持额外的 Liquid,因此你只能直接引用值。如果你加入了额外的 Liquid 语法,将会报错。

下面是一个引用动态数据源的 default 设置示例:

  1. {
  2. "type": "text",
  3. "id": "featured_product_title",
  4. "label": "Featured product title",
  5. "default": "Featuring: {{ product.title }}"
  6. }

限制

Shopify 对你在主题中不同区域使用动态数据源的数量有限制。这样做是为了保持主题性能良好。

动态数据源限制

描述 限制
一个 JSON 模板 中的动态数据源数量 100
通用主题设置 中的动态数据源数量 100
一个 section group 中的动态数据源数量 100
单个设置中的动态数据源数量 50
一个 静态 section 中的动态数据源数量 50