Liquid 的
concat
过滤器就像一个魅力,在自行创建的数组或来自部分设置的数组上使用它。但是,当我在 Shopify 产品的元字段的数组上使用它时,我无法让它工作。
我的产品有两个元字段:一个包含产品列表,另一个包含产品变体列表。元字段的类型是
list.product_reference
和list.variant_reference
。我想合并两个列表:
{%- assign products = product.metafields.custom.fcv_products.value -%}
{%- assign variants = product.metafields.custom.fcv_variants.value -%}
{%- assign items = products | concat: variants -%}
但是,
items
将是null
。当在控制台中输出这个表达式时,如下所示:
<script>console.log({{ products | concat: variants | json }})</script>
我收到以下错误:
Liquid error (sections/...): concat filter requires an array argument
两个数组都包含元素。以下日志均按预期工作:
{%- for variant in variants -%}
<script>console.log({{ variant | json }}); // Prints variants from the list </script>
{%- endfor -%}
<script>console.log({{ products | json }}); // Prints an array with products </script>
<script>console.log({{ variants | json }}); // Prints an array with variants </script>
<script>console.log({{ items | json }}); // Prints null </script>
在此使用元字段的解决方案之前,我使用了类似于以下的内容,效果非常好:
{%- assign products = section.settings.products -%}
{%- assign variants_nested = products | map: "variants" -%}
{%- assign variants = "" | split: "" -%}
{%- for variants_list in variants_nested -%}
{%- assign variants = variants | concat: variants_list %}
{%- endfor -%}
{%- assign items = products | concat: variants -%}
由于需求发生变化,我们必须切换到元字段解决方案。
有什么想法吗?
我的一位同事使用
reverse
想出了一个解决方案。
{% liquid
assign test1 = page.metafields.namespace.test_1.value | reverse
if page.metafields.namespace.test_2 != blank
assign test2 = page.metafields.namespace.test_2.value | reverse
assign test1 = test1 | concat: test2
endif
%}
如果您需要保留原来的订单,请使用
| reverse | reverse
。