shopify - If 语句在 Liquid 中包含 contains 和 downcase
问题描述
我正在尝试在语句downcase
内部使用,同时使用条件。我不敢相信没有适用于 Google 的解决方案。if
contains
这是我迄今为止尝试过的:
{% if collection.tags | downcase contains "womens" %}
{% if {{collection.tags | downcase}} contains "womens" %}
{% if {{collection.tags}} | downcase contains "womens" %}
如果可能的话,我不想循环数组并将降级字符串分配回一个新数组,只是为了保持干净和高效。
解决方案
您不能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',并且会出现意外的误报。
推荐阅读
- c# - 模型返回 NULL 尝试传递选定复选框的值
- java - Mavic 2 Enterprise 与 DJI GO 配合使用后不显示视频
- groovy - 如何在 Jmeter 中使用后处理器设置变量值并将其用于同一采样器的预处理器中?
- android - 将数据从 Room 返回到 ViewModel,然后使用来自 web 服务的新数据更新 ViewModel
- node.js - 节点 Js 将参数传递给“现成”回调
- javascript - 在 Dexie.js 中检查和添加缺失商店的最佳实践
- java - 通过 Spring Boot Keycloak 集成的 OAuth2 客户端凭据流
- java - JPanel 类未添加到 JFrame
- javascript - 如何使 Highcharts 缩放工作,目前不是因为 _highchartsZoom(e) 未被识别为函数?
- java - 什么是'@CalledByNative("...")'?