Shopify-列出要显示的可用变体

时间:2019-04-01 13:34:16

标签: arrays shopify liquid

我试图显示商店中每种产品都有哪些变体。尽管我有执行此工作的代码,但每个可用变体都应以逗号分隔,最后一个除外。

我尝试过附加字符串过滤器,但这包括最后一项。

我尝试使用{%if forloop.last%},但是即使变量不可用,代码也会包含该变量。

这是我的代码:

{% if product.variants.size > 0 and product.available %}
    {% unless product.has_only_default_variant %}
      <span class="sizes-available">
        Sizes in stock:

            {% for variant in product.variants %}
              {% if variant.available %}

                  {{ variant.title | append: ', '}}

              {% endif %}
            {% endfor %}

      </span>
    {% endunless %}
  {% endif %}

如果产品具有三个变体(A尺寸,B尺寸,C尺寸)并且C尺寸缺货,则我想要的输出是:A尺寸,B尺寸

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

找到答案了……必须是一个数组才能使用连接数组过滤器。

更新的代码:

{% if product.variants.size > 0 and product.available %}
    {% unless product.has_only_default_variant %}
      <span class="sizes-available">
        Sizes in stock:
          {% capture list %}
            {% for variant in product.variants %}
              {% if variant.available %}    
                  {{ variant.title }}
              {% endif %}
            {% endfor %}
          {% endcapture %}

          {% assign array = list | split: ' ' %}

          {{ array | join: ', ' }}   
      </span>
    {% endunless %}
  {% endif %}

答案 1 :(得分:0)

您正在跳过未知数量的元素,这些元素可能包括列表中的第一个或最后一个元素-因此我们不能依赖forloop.firstforloop.last,因为其中任何一个都可能是一个跳过的元素。

解决这种情况的另一种方法是,除了最后一个元素之外,每个元素之后都需要逗号,如下所示:

{%- assign empty_list = true -%}
{%- for variant in product.variants -%}
  {%- comment -%}Skip the variant if it's not available{%- endcomment -%}
  {%- unless variant.available -%}
    {%- continue -%}
  {%- endunless -%}

  {%- comment -%}Print a comma unless our list is empty{%- endcomment -%}
  {%- unless empty_list -%},{%- endunless -%}
  {%- assign empty_list = false -%}

  {%- comment -%}Now print our new entry{%- endcomment -%}
  <span class="variant-name"> {{ variant.title }}</span>
{%- endfor -%}

(注意:在上面的示例中,我在Liquid标签中添加了带空格的-,以删除标签之间所有多余的换行符/制表符/空格。请参见https://shopify.github.io/liquid/basics/whitespace/更多细节)