【问题标题】:how to update cart total after change item price with observer?与观察者更改商品价格后如何更新购物车总数?
【发布时间】:2013-03-29 08:53:35
【问题描述】:

我想在购物车中添加一些免费的礼物,所以我创建了一个观察者,代码是:

<?php
 class Free_Checkout_Model_Observer
{
    public function modifyPrice(Varien_Event_Observer $observer)
    {
        $event = $observer->getEvent();
        $quote = Mage::getModel('checkout/session')->getQuote();
        $quote_item = $event->getQuoteItem();
        $productId  = $event->getQuoteItem()->getProduct()->getId();

        $product        = Mage::getModel('catalog/product')->load($productId);
        $productData    = $product->getData();

        if($productData['gift']){
            $new_price = 0;
            $quote_item->setOriginalCustomPrice($new_price);
            $quote_item->setCustomPrice($new_price);
            $quote_item->save();
        }

    }


}

但是当我将商品添加到购物车时,购物车中的小计为0,有人告诉我如何解决这个问题吗? 当我再添加一项或刷新购物车页面时,小计是正确的

【问题讨论】:

    标签: magento shopping-cart subtotal


    【解决方案1】:

    试试

    $quote->collectTotals()->save()
    

    在函数结束时

    【讨论】:

    • 感谢您的帮助,但是当我将第一项添加到购物车时,小计仍为 0... ^_^
    【解决方案2】:

    试试这个

    $quote = Mage::getSingleton('checkout/session')->getQuote();
    foreach($quote->getAllItems() as $quote_item) {
        $product = Mage::getModel('catalog/product')->load($quote_item->getProductId());
        $productData  = $product->getData();
        if($productData['gift']){
            $new_price = 0;
            $quote_item->setOriginalCustomPrice($new_price);
            $quote_item->setCustomPrice($new_price);
            $quote_item->getProduct()->setIsSuperMode(true);
        }
    }
    $quote->save();
    

    【讨论】:

    • 啊哈,我试过这个但没有得到正确的结果,但我在开头添加了一些代码,它可以工作
      $cart = Mage::getSingleton('结帐/购物车'); $cart-&gt;init(); $cart-&gt;save();
    猜你喜欢
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多