使用 Shopify Liquid 模板访问元字段中的 JSON 块
Access JSON lumps in metafields with Shopify Liquid templates
我想知道是否有人知道我是否可以在 Liquid 中访问 JSON,如下例所示。
我已经使用名称空间 suppliers_details
、键 suppliers
和值:
为供应商页面创建了一个元字段
{
name: "Supplier Name One",
address: "Supplier Address One"
},
{
name: "Supplier Name Two",
address: "Supplier Address Two"
}
在我的模板中:
{% assign suppliers = page.metafields.suppliers.suppliers %}
{% for supplier in suppliers %}
<p>{{ supplier.name }}</p>
<p>{{ supplier.address }}</p>
{% endfor %}
这不起作用,因为我无法将数据更改为模板可用于循环访问的格式,有没有办法做到这一点?
干杯
无法使用 Liquid 或至少不是默认方式来解析 JSON。
您可以编写一些代码将其拆分成多个部分,但您将无法链接对象:
{% capture string %}{name:"Supplier Name One",address:"Supplier Address One"},{name:"Supplier Name Two",address:"Supplier Address Two"}{% endcapture %}
{% assign jsplit = string | replace: '},{', '@@' %}
{% assign jsplit = jsplit | replace: '{' %}
{% assign jsplit = jsplit | replace: '}' %}
{% assign jsplit = jsplit | split: '@@' %}
{% for json in jsplit %}
{% assign splitByComma = json | split: ',' %}
{% for comma in splitByComma %}
{% assign splitByDots = comma | split: ':' %}
<p>{{ splitByDots[1] }}</p>
{% endfor %}
{% endfor %}
你会得到想要的结果,但不是你想象的那样。
最好的方法是将字符串传递给 Javascript,在那里解析它并通过 JS 填充 DOM。
现在支持此功能,它改变了游戏规则! Shopify 发布了一种名为 "json_string" 的新元字段格式类型,可让您通过普通的液体点表示法直接访问每个节点的值。我知道这会让每个人的生活更轻松。摘自文档 (https://help.shopify.com/en/themes/liquid/objects/metafield):
以下是 Shopify 开发人员在 Shopify 论坛上发表的最初帖子之一,可能对您有所帮助:https://ecommerce.shopify.com/c/api-announcements/t/new-json_string-value-type-for-metafield-object-540896
我认为它现在可以工作了,下面是我的 json ,它是产品元字段 & valueType 是 json string
[
{
"question":"hello this is question",
"answer":"Hello This is answer"
},
{
"question":"hello this is question2 ",
"answer":"Hello This is answer 2"
}
]
吹是液体代码
{% assign qas = product.metafields.manifester.product_qa %} // product.metafields.{namespace}.{key}
{% for qa in qas %}
<div style="border-bottom: 1px solid #222222;">
<p> {{ qa.question }} </p>
<p style="font-weight:bold"> {{ qa.answer }} </p>
</div>
{% endfor %}
Shopify 自此弃用了“json_string”元字段并提供了“json”元字段选项。
要使用点表示法访问数据,您需要在键后使用 .value。
例如,如果我有这个 JSON:
{
name: "Supplier Name One",
address: "Supplier Address One"
},
{
name: "Supplier Name Two",
address: "Supplier Address Two"
}
我会这样访问它:
{% assign suppliers = page.metafields.suppliers.suppliers.value %}
{% for supplier in suppliers %}
<p>{{ supplier.name }}</p>
<p>{{ supplier.address }}</p>
{% endfor %}
我想知道是否有人知道我是否可以在 Liquid 中访问 JSON,如下例所示。
我已经使用名称空间 suppliers_details
、键 suppliers
和值:
{
name: "Supplier Name One",
address: "Supplier Address One"
},
{
name: "Supplier Name Two",
address: "Supplier Address Two"
}
在我的模板中:
{% assign suppliers = page.metafields.suppliers.suppliers %}
{% for supplier in suppliers %}
<p>{{ supplier.name }}</p>
<p>{{ supplier.address }}</p>
{% endfor %}
这不起作用,因为我无法将数据更改为模板可用于循环访问的格式,有没有办法做到这一点?
干杯
无法使用 Liquid 或至少不是默认方式来解析 JSON。
您可以编写一些代码将其拆分成多个部分,但您将无法链接对象:
{% capture string %}{name:"Supplier Name One",address:"Supplier Address One"},{name:"Supplier Name Two",address:"Supplier Address Two"}{% endcapture %}
{% assign jsplit = string | replace: '},{', '@@' %}
{% assign jsplit = jsplit | replace: '{' %}
{% assign jsplit = jsplit | replace: '}' %}
{% assign jsplit = jsplit | split: '@@' %}
{% for json in jsplit %}
{% assign splitByComma = json | split: ',' %}
{% for comma in splitByComma %}
{% assign splitByDots = comma | split: ':' %}
<p>{{ splitByDots[1] }}</p>
{% endfor %}
{% endfor %}
你会得到想要的结果,但不是你想象的那样。
最好的方法是将字符串传递给 Javascript,在那里解析它并通过 JS 填充 DOM。
现在支持此功能,它改变了游戏规则! Shopify 发布了一种名为 "json_string" 的新元字段格式类型,可让您通过普通的液体点表示法直接访问每个节点的值。我知道这会让每个人的生活更轻松。摘自文档 (https://help.shopify.com/en/themes/liquid/objects/metafield):
以下是 Shopify 开发人员在 Shopify 论坛上发表的最初帖子之一,可能对您有所帮助:https://ecommerce.shopify.com/c/api-announcements/t/new-json_string-value-type-for-metafield-object-540896
我认为它现在可以工作了,下面是我的 json ,它是产品元字段 & valueType 是 json string
[
{
"question":"hello this is question",
"answer":"Hello This is answer"
},
{
"question":"hello this is question2 ",
"answer":"Hello This is answer 2"
}
]
吹是液体代码
{% assign qas = product.metafields.manifester.product_qa %} // product.metafields.{namespace}.{key}
{% for qa in qas %}
<div style="border-bottom: 1px solid #222222;">
<p> {{ qa.question }} </p>
<p style="font-weight:bold"> {{ qa.answer }} </p>
</div>
{% endfor %}
Shopify 自此弃用了“json_string”元字段并提供了“json”元字段选项。
要使用点表示法访问数据,您需要在键后使用 .value。
例如,如果我有这个 JSON:
{
name: "Supplier Name One",
address: "Supplier Address One"
},
{
name: "Supplier Name Two",
address: "Supplier Address Two"
}
我会这样访问它:
{% assign suppliers = page.metafields.suppliers.suppliers.value %}
{% for supplier in suppliers %}
<p>{{ supplier.name }}</p>
<p>{{ supplier.address }}</p>
{% endfor %}