描述:
在salerule的action中,想优惠规则应用于attribute season值为autumn的商品( season是在项目中新添加的一个product attribute),如下图:
但在购物车中发现产品的season值为autumn,但总是没法应用优惠价格,debug了一下代码,发现问题在 Mage_SalesRule_Model_Rule_Condition_Product中
/**
* Validate Product Rule Condition
*
* @param Varien_Object $object
* @return bool
*/
public function validate(Varien_Object $object)
{
$product = false;
if ($object->getProduct() instanceof Mage_Catalog_Model_Product) {
$product = $object->getProduct();
} else {
$product = Mage::getModel('catalog/product')
->load($object->getProductId());
}
$product
->setQuoteItemQty($object->getQty())
->setQuoteItemPrice($object->getPrice()) // possible bug: need to use $object->getBasePrice()
->setQuoteItemRowTotal($object->getBaseRowTotal());
return parent::validate($product);
}
当用
$product = $object->getProduct();
来获取product对象后,product对象中只包含默认的product attribute,新增加的product attribute是不包含在product object中。
最简单的解决方法,把
if ($object->getProduct() instanceof Mage_Catalog_Model_Product) {
$product = $object->getProduct();
} else {
$product = Mage::getModel('catalog/product')
->load($object->getProductId());
}
改为
$product = Mage::getModel('catalog/product')
->load($object->getProductId());