动态数据源

动态数据源,也叫做 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 类型是兼容的:

设置 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