购物车促销和产品属性的可能错误组合,在某些条件下始终返回true

时间:2011-08-03 13:04:42

标签: php magento

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

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

如果购物车中的商品已找到所有这些条件为真: 套餐价格大于1

当它进入逻辑时,你最终会到达/app/code/core/Mage/Rule/Model/Condition/Abstract.php

并在方法validateAttribute中。在尝试从报价项产品中获取属性值后,它会到达此处。在我的例子中,参数$validatedValue为空,因为它无法将其从数据数组中取出。

代码可以正常运行到这里

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

显然它被设置为假。在切换语句之后我不明白你有这个小代码片段

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

将某些运算符$ result变量设置为相反,所以在我的情况下它使它成立,然后使我的条件通过,即使它不应该。我想任何时候有人使用未添加到报价项目的自定义属性进行购物车促销,如果您只是让运行界面的管理员用户尝试向产品添加新属性并使用它们创建促销,则会发生很多情况。如果使用其中一个运算符,促销将始终通过。我不能为我的生活弄清楚需要什么或为什么&gt;与&gt; =有任何不同。

更不用说,您是否认为任何标记为促销条件的属性都应添加到报价项目产品中?

有人可以帮助我理解为什么它需要以这种方式工作。我想在联系Magento之前发布此信息。

1 个答案:

答案 0 :(得分:0)

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