如何使用 shopify Liquid 迭代元字段中的命名空间

问题描述 投票:0回答:2

在“product.liquid”模板中,我想将所有元字段公开给我的 JavaScript 代码。现在我有一个名为“mystuff”的命名空间,所以我这样做了......

// Copy all the METAFIELDS into the meta object
let meta = {
    global: {{ product.metafields.global | json }},
    mystuff: {{ product.metafields.mystuff | json }}
};

这有效。但是,它要求我提前知道所有名称空间并每行列出一个名称空间。我可以像这样以编程方式获取命名空间列表吗?

let meta = {
    {% for ns in product.metafields.namespaces %}
        {{ ns.name }} : {{ ns | json }},
    {% endfor %}
};

我尝试过,但这不起作用。有办法做到吗?

shopify liquid
2个回答
2
投票

后退一级并仅迭代元字段,您也许能够看到允许您查看的元字段。我相信作为应用程序开发人员,我们最终可以隐藏自己的元字段名称空间以免被窥探,所以 YMMV 在这里。

请注意,也不建议您的代码尝试将此结果转换为 JSON。相反,获取名称空间元字段,迭代它们,每个元字段都有一个类型、键和值。在某些字段中您也会获得 JSON 值。


0
投票

因此循环遍历所有元字段的简单方法如下:

条件 要循环元字段,您应该保留相同的命名空间,默认情况下 Shopify 为所有元字段设置“自定义”命名空间。创建元字段时您可以保留任何内容。 假设我们将循环遍历所有元字段,并将命名空间添加为“选项”,因此我们有

product.metafields.option.KEY

{% for metafield in product.metafields.option %}
 {% assign key = metafield[0] %}
 {% assign type = product.metafields.option[key].type %}

<!--// Now you got the meta-field's KEY & TYPE, handle it according to its access syntax; for example below, I am printing text of type text-multiline(list.single_line_text_field) meta-field values -->

 {% assign values = product.metafields.option[key].value %}
  {% for value in values %}
   {{ value }}
  {% endfor %}

 {% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.