我在Twig中遇到了问题,无法检查数组中是否存在某个值。
如果购物车中有特定产品,则我想在结算时隐藏运输方式。
Twig
是我唯一可以使用的代码,所以我必须在其中找到逻辑。
如果购物车中存在产品ID为1234的产品,则希望隐藏#certain_div
。
因此,我的代码如下:
{% if checkout %}
{% set array = theme.sku_shipping_rule | split(',') %}
// theme.sku_shipping_rule = a text string like 1234, 4321, 5478
{% if checkout.products %}
{% for product in checkout.products %}
{% if product.sku in array %}
<style>
#certain_div {
display: none;
}
</style>
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
我面临的问题是,我的代码似乎总是返回true。因此,即使
product.sku
与数组中的值不匹配,它仍然隐藏了#certain_div
。我已经在<style>
之前放置了{{ product.sku }}
进行测试。请问我错在哪里?
非常感谢任何帮助!
更新:
我已经更新了问题/代码以显示发生了什么。
{% if checkout %}
{% set skuToCheck = theme.sku_shipping_rule | split(',') %}
{% set skuInCart = [] %}
{% if checkout.quote.products %}
{% for product in checkout.quote.products %}
{% set skuInCart = skuInCart | merge([product.sku]) %}
{% endfor %}
{% endif %}
{% for myVar in skuInCart %}
{{ myVar }}<br/>
{% endfor %}
// this prints
PSYGA1 // where this sku should NOT match
FP32MA4
{% for myVar in skuToCheck %}
{{ myVar }}<br/>
// this prints
FP32LY4
FP32STR4
FP32MA4
{% if myVar in skuInCart %} // also tried with | keys filter
{{ myVar }} is found
{% endif %}
{% endfor %}
{% endif %}
所以我做的是把购物车中的产品的sku放在一个数组skuInCart
中。接下来我想检查myVar
是否存在于skuInCart
数组中。如果是,则打印myVar is found
。
预期的结果应该是只打印匹配的结果,但实际上它会打印出skuInCart
数组中所有的值(使用keys
过滤器),或者完全没有使用keys
过滤器而变成空白。
certain_div
的值?因为如果你将其应用于所有div,那么会有两个问题。第一,ID应该是唯一的;第二,你正在对你可能不想要的元素应用样式。 - Chase