使用 Liquid 查找最后一个匹配的元素
FInd last matched element using Liquid
我正在为 Shopify 商店开发自定义解决方案,我的问题是我无法管理如何避免在 case
语句中最后一个匹配的标签之后添加“/”。
我尝试使用一些 if
语句和 forloop
过滤器但没有结果。
我想到的最后一件事是在循环中找到最后一个匹配的标签,这将帮助我们避免在最后一个元素之后使用“/”,但不幸的是我无法管理如何做到这一点。
预期结果: Wool/Nylon/Viscose
这是将分配给产品的所有标签与输出所需的标签列表(服装 materials)进行比较的代码部分。
考虑到产品有羊毛、尼龙、粘胶等标签,非material.
示例 1
实际和预期结果: 羊毛尼龙粘胶纤维
{% for tag in product.tags %}
{% case tag %}
{% when 'Viscose' %}
Viscose
{% when 'Wool' %}
Wool
{% when 'Polyamide' %}
Polyamide
{% when 'Nylon' %}
Nylon
{% else %}
{% endcase %}
{% endfor %}
示例 2
Filter forloop.last
用于定义循环的最后一个元素,但问题是 material tags(Wool, Nylon, Viscose) 可以位于产品标签数组的中间.考虑到产品有 10 个标签,material 个标签分布在数组中,我们将看到下一个结果。
结果: ///Wool/Nylon////粘胶//
{% for tag in product.tags %}
{% if forloop.last == true %}
{% case tag %}
{% when 'Viscose' %}
Viscose
{% when 'Wool' %}
Wool
{% when 'Nylon' %}
Nylon
{% else %}
{% endcase %}
{% else %}
{% case tag %}
{% when 'Viscose' %}
Viscose
{% when 'Wool' %}
Wool
{% when 'Nylon' %}
Nylon
{% else %}
{% endcase %}
/
{% endif %}
{% endfor %}
如果您能指出我的错误并建议我如何实现解决方案,我将不胜感激。
您可以尝试以下方法:-
{% for tag in product.tags %}
{% case tag %}
{% when 'Viscose' %}
{{ 'Viscose' | append: '/' }}
{% when 'Wool' %}
{{ 'Wool' | append: '/' }}
{% when 'Polyamide' %}
{{ 'Polyamide' | append: '/' }}
{% when 'Nylon' %}
{{ 'Nylon' }}
{% else %}
{% endcase %}
{% endfor %}
这应该有效:
{% capture tag_string %}{% endcapture %}
{% for tag in product.tags %}
{% if tag == 'Viscose' %}{% capture tag_string %}{{ tag_string }}Viscose/{% endcapture %}
{% elsif tag == 'Wool' %}{% capture tag_string %}{{ tag_string }}Wool/{% endcapture %}
{% elsif tag == 'Polyamide' %}{% capture tag_string %}{{ tag_string }}Polyamide/{% endcapture %}
{% elsif tag == 'Nylon' %}{% capture tag_string %}{{ tag_string }}Nylon/{% endcapture %}
{% endif %}
{% endfor %}
{{ tag_string | split: "" | reverse | join: "" | remove_first: "/" | split: "" | reverse }}
有关字符串过滤器的更多信息:https://help.shopify.com/themes/liquid/filters/string-filters
我正在为 Shopify 商店开发自定义解决方案,我的问题是我无法管理如何避免在 case
语句中最后一个匹配的标签之后添加“/”。
我尝试使用一些 if
语句和 forloop
过滤器但没有结果。
我想到的最后一件事是在循环中找到最后一个匹配的标签,这将帮助我们避免在最后一个元素之后使用“/”,但不幸的是我无法管理如何做到这一点。
预期结果: Wool/Nylon/Viscose
这是将分配给产品的所有标签与输出所需的标签列表(服装 materials)进行比较的代码部分。
考虑到产品有羊毛、尼龙、粘胶等标签,非material.
示例 1
实际和预期结果: 羊毛尼龙粘胶纤维
{% for tag in product.tags %}
{% case tag %}
{% when 'Viscose' %}
Viscose
{% when 'Wool' %}
Wool
{% when 'Polyamide' %}
Polyamide
{% when 'Nylon' %}
Nylon
{% else %}
{% endcase %}
{% endfor %}
示例 2
Filter forloop.last
用于定义循环的最后一个元素,但问题是 material tags(Wool, Nylon, Viscose) 可以位于产品标签数组的中间.考虑到产品有 10 个标签,material 个标签分布在数组中,我们将看到下一个结果。
结果: ///Wool/Nylon////粘胶//
{% for tag in product.tags %}
{% if forloop.last == true %}
{% case tag %}
{% when 'Viscose' %}
Viscose
{% when 'Wool' %}
Wool
{% when 'Nylon' %}
Nylon
{% else %}
{% endcase %}
{% else %}
{% case tag %}
{% when 'Viscose' %}
Viscose
{% when 'Wool' %}
Wool
{% when 'Nylon' %}
Nylon
{% else %}
{% endcase %}
/
{% endif %}
{% endfor %}
如果您能指出我的错误并建议我如何实现解决方案,我将不胜感激。
您可以尝试以下方法:-
{% for tag in product.tags %}
{% case tag %}
{% when 'Viscose' %}
{{ 'Viscose' | append: '/' }}
{% when 'Wool' %}
{{ 'Wool' | append: '/' }}
{% when 'Polyamide' %}
{{ 'Polyamide' | append: '/' }}
{% when 'Nylon' %}
{{ 'Nylon' }}
{% else %}
{% endcase %}
{% endfor %}
这应该有效:
{% capture tag_string %}{% endcapture %}
{% for tag in product.tags %}
{% if tag == 'Viscose' %}{% capture tag_string %}{{ tag_string }}Viscose/{% endcapture %}
{% elsif tag == 'Wool' %}{% capture tag_string %}{{ tag_string }}Wool/{% endcapture %}
{% elsif tag == 'Polyamide' %}{% capture tag_string %}{{ tag_string }}Polyamide/{% endcapture %}
{% elsif tag == 'Nylon' %}{% capture tag_string %}{{ tag_string }}Nylon/{% endcapture %}
{% endif %}
{% endfor %}
{{ tag_string | split: "" | reverse | join: "" | remove_first: "/" | split: "" | reverse }}
有关字符串过滤器的更多信息:https://help.shopify.com/themes/liquid/filters/string-filters