【问题标题】:Access JSON lumps in metafields with Shopify Liquid templates使用 Shopify Liquid 模板访问元字段中的 JSON 块
【发布时间】:2017-03-28 16:39:45
【问题描述】:

我想知道是否有人知道我是否可以在 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 %}

这不起作用,因为我无法将数据更改为模板可以用来迭代的格式,有没有办法做到这一点?

干杯

【问题讨论】:

    标签: json shopify template-engine liquid


    【解决方案1】:

    现在支持它并且改变了游戏规则! 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

    【讨论】:

      【解决方案2】:

      无法使用 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 来包含 YAML 文件并解析它们的功能(正如 Jekyll 允许的那样)?
      • 不,当然不是。为什么 Shopify 会使用浏览器中没有模拟的格式? JSON 是浏览器中客户端计算的标准数据结构,因此您得到 JSON。由于 JSON 是一个字符串,我们很幸运将它们存储在元字段中,然后使用我们可信赖的 JS 渲染其中的数据。
      • 用 JS 构建它的一个问题是 SEO。如果这是一个菜单或需要对 SEO 友好的东西,使用 JS 构建它会影响您的 SEO。
      • 老兄......这是解决这个问题的最疯狂和绝对唯一的方法。我在流口水。我的项目完成了。我有 200 种产品,它们都具有独特的属性但没有变体,我只希望在确认电子邮件中显示独特的信息。所以我标记我的产品,并在发送收据之前解析 json 标签。如此史诗。谢谢。
      【解决方案3】:

      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 %}
      

      【讨论】:

        【解决方案4】:

        我认为它现在正在工作,下面是我的 json ,它是产品元字段 & valueType 是 json 字符串

        [ 
           { 
              "question":"hello this is question",
              "answer":"Hello This is answer"
           },
           { 
              "question":"hello this is question2 ",
              "answer":"Hello This is answer 2"
           }
        ]
        

        Blow 是液体代码

        {% 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 %}
        

        【讨论】:

        • 这是否适用于新类型“json”,因为“json_string”已被弃用?
        猜你喜欢
        • 2012-08-10
        • 1970-01-01
        • 2020-10-01
        • 2022-01-16
        • 2015-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        相关资源
        最近更新 更多