If 语句包含 Liquid 和 Downcase

If Statement With Contains And Downcase In Liquid

我试图在 if 语句中使用 downcase,同时使用 contains 条件。我不敢相信没有 Google 可行的解决方案。

这是我到目前为止尝试过的方法:

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

如果可能的话,我不想循环数组并将小写的字符串分配回新数组,只是为了保持整洁和高效。

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

所以在你的情况下,是这样的:

{% 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' 并且会是意想不到的假阳性。