我试图显示商店中每种产品都有哪些变体。尽管我有执行此工作的代码,但每个可用变体都应以逗号分隔,最后一个除外。
我尝试过附加字符串过滤器,但这包括最后一项。
我尝试使用{%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尺寸
在此先感谢您的帮助。
答案 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.first
或forloop.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/更多细节)