在“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 %}
};
我尝试过,但这不起作用。有办法做到吗?
后退一级并仅迭代元字段,您也许能够看到允许您查看的元字段。我相信作为应用程序开发人员,我们最终可以隐藏自己的元字段名称空间以免被窥探,所以 YMMV 在这里。
请注意,也不建议您的代码尝试将此结果转换为 JSON。相反,获取名称空间元字段,迭代它们,每个元字段都有一个类型、键和值。在某些字段中您也会获得 JSON 值。
因此循环遍历所有元字段的简单方法如下:
条件 要循环元字段,您应该保留相同的命名空间,默认情况下 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 %}