Liquid 的 concat 过滤器不适用于 Shopify 元字段中的数组?

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

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

由于需求发生变化,我们必须切换到元字段解决方案。

有什么想法吗?

shopify liquid shopify-template shopify-liquid
1个回答
0
投票

我的一位同事使用

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

© www.soinside.com 2019 - 2024. All rights reserved.