首页 > 解决方案 > If 语句在 Liquid 中包含 contains 和 downcase

问题描述

我正在尝试在语句downcase内部使用,同时使用条件。我不敢相信没有适用于 Google 的解决方案。ifcontains

这是我迄今为止尝试过的:

{% if collection.tags | downcase contains "womens" %}
{% if {{collection.tags | downcase}} contains "womens" %}
{% if {{collection.tags}} | downcase contains "womens" %}

如果可能的话,我不想循环数组并将降级字符串分配回一个新数组,只是为了保持干净和高效。

标签: shopifyliquid

解决方案


您不能if在 Liquid 中的语句内操作值 - 您需要将小写的值分配给变量,然后使用它。

所以在你的情况下,类似:

{% assign collection_tags = collection.tags | join: '~~~' | downcase | split: '~~~' %}
{% if collection_tags contains 'womens' %}

笔记:

downcase是字符串操作,而不是数组操作,因此上面的代码用于join将数组转换为单个长字符串,其中包含一些不应出现在任何标签中的分隔符,然后split使用相同的方法将该字符串返回到数组中改变大小写后的分隔符。

如果我们只downcase在数组本身上使用,Shopify 将使用空字符串隐式连接数组,然后您的contains语句将womens在结果 blob 中查找子字符串。相比之下,在contains数组上使用时,Shopify 只会匹配与您的搜索词完全匹配的标签。

举例来说,如果您的集合标签是['Not-For-Women','Stuff']downcase则直接对数组进行 -ing 将为您提供字符串'not-for-womenstuff',该字符串恰好包含子字符串 'womens',并且会出现意外的误报。


推荐阅读