magento salerule中关于attribute的一个bug

本文详细介绍了在Salerule的action中,如何正确地将优惠规则应用于产品属性季节为秋季的商品,通过分析代码并解决在购物车中应用优惠价时的问题,最终提供了简单的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述:


在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());



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newjueqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值