购物车促销和产品属性组合可能存在的Bug,在某些条件下总是返回true


Possible Bug with Shopping Cart Promotions and Product Attributes Combination, always returning true for certain conditions

我正在进行一些调试,试图查看购物车上的促销条件在使用产品属性组合时是如何验证属性的。我不明白Magento是如何从产品中获取自定义属性值的,如果自定义属性没有添加到config.xml中的报价项产品中。

因此,当我调试到验证逻辑时,我做了一个测试,我创建了一个名为package_price的属性,并将其分配给一个产品,并将其值为20。然后设置一个条件:

如果在购物车中找到一个商品,并且所有这些条件都为真:包装价格大于1

随着它进入逻辑你最终得到这里的/app/code/core/Mage/Rule/Model/Condition/Abstract.php

,方法validateAttribute。它在尝试从报价项product中获取属性值之后到达这里。在我的例子中,参数$validatedValue是空的,因为它不能从数据数组中获取它。

代码一直运行到这里

            case '<=': case '>':
            if (is_array($validatedValue) || is_null($validatedValue)) {
                $result = false;
            } else {
                $result = $validatedValue<=$value;
            }
            break;

显然它被设为false。我不明白的是switch语句后面有一小段代码

if ('!='==$op || '>'==$op || '<'==$op || '!{}'==$op || '!()'==$op) {
            $result = !$result;
}

它将某些操作符$result变量设置为相反的值,所以在我的例子中,它使它为真,然后使我的条件通过,即使它不应该通过。我在想,任何时候有人用没有添加到报价项目的自定义属性进行购物车促销,如果你只是让管理用户运行界面,尝试向产品添加新属性并使用它们创建促销,这种情况就会发生很多。如果他们使用这些操作符中的一个,提升总是通过的。我无论如何也弄不明白为什么需要这个,或者为什么>和>=有什么不同。

更不用说,你不认为任何标记为用于促销条件的属性都应该添加到报价项product中吗?

有人能帮我理解为什么它需要这样工作吗?我想在联系Magento之前把这个贴在这里。

这至少是企业版的错误,如果您联系Varien支持,现在有补丁可用。