与观察者更改商品价格后如何更新购物车总数?

Posted

技术标签:

【中文标题】与观察者更改商品价格后如何更新购物车总数?【英文标题】: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,有人告诉我如何解决这个问题吗? 当我再添加一项或刷新购物车页面时,小计是正确的

【问题讨论】:

【参考方案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();

以上是关于与观察者更改商品价格后如何更新购物车总数?的主要内容,如果未能解决你的问题,请参考以下文章

php WooCommerce - 在Ajax之后更新购物车中的商品数量和总数

如何在颤动中将商品计数从购物车屏幕更新到餐厅详细信息屏幕并返回到餐厅详细信息屏幕?

关于电商网站购物车功能如何与登录账号相关联的一点想法

更新 Stripe 数据量

WooCommerce 中的购物车总数是不是为 0 时未显示付款方式

jQuery基于json与cookie实现购物车的方法