OpenCart的Twig模板中如何正确比较两个字符串变量
OpenCart Twig 模板双变量比较失效解决方法
问题根源
两个变量可正常打印但比较逻辑不生效,核心原因基本都是变量携带首尾不可见空白(控制器传参时拼接的换行、空格、制表符),或是变量类型不匹配(比如一个是整型、一个是同值的字符串)。硬编码固定值可正常判断,就是因为写死的内容没有多余空白、类型完全可控。
解决步骤
- 先确认变量是否存在隐藏字符,在模板中加入以下代码输出变量长度,和你预期的字符长度做对比:
currpage长度:{{ currpage|length }} | field.value长度:{{ field.value|length }}
如果输出长度比你肉眼看到的字符数大,就说明存在不可见的冗余字符。
- 比较前先对两个变量做统一清洗,去除首尾空白、统一转成字符串类型,再做判断,参考代码:
{# 预处理变量,消除格式干扰 #} {% set page_name = currpage|trim|string %} {% set target_val = field.value|trim|string %} {# 相等判断 #} {% if page_name == target_val %} {# 此处写判断通过后执行的业务代码 #} {% endif %} {# 包含判断(判断前者是否是后者子串) #} {% if page_name in target_val %} {# 此处写包含逻辑的业务代码 #} {% endif %}
注意:日常业务判断不要用same as操作符,这个操作符会做严格类型校验,OpenCart控制器传参时经常出现同值不同类型的情况,很容易判定失效,普通业务场景用==配合预处理后的变量即可。
内容的提问来源于stack exchange,提问作者gerstavros
相关产品推荐
相关产品推荐

