0

我有这样的观察者

<events>
 <sales_quote_add_item>
         <observers>
            <reservation_observer_order_save_before1>
                <type>singleton</type>
                <class>Mageec_Total_Model_Observer</class>
                <method>updatePrice</method>
            </reservation_observer_order_save_before1>
         </observers>
 </sales_quote_add_item>
</events>

函数 updatePrice 如下:

public function updatePrice($observer){

    $event = $observer->getEvent();

    $quote_item = $event->getQuoteItem();


    if ($quote_item->getProductType() == "virtual"){
        $new_price = (float)$quote_item->getProduct()->getPrice();
        $quote_item->setOriginalCustomPrice($new_price);

        $qty = Mage::getSingleton('checkout/cart')->getSummaryQty(); //return 0
                    $qty = $quote_item->getQty(); //return 0 too
        Mage::log(print_r($qty,true));



        $quote_item->setTotalPrice( $new_price * $qty );
    }
}

我无法获得购物车数量或至少报价项目数量。我认为这是因为这个观察者在购物车对象被填充之前执行。那么在这种情况下我在哪里可以获得数量?

4

2 回答 2

1

我自己找到了解决方案。当我们将第一个产品放入购物车时,运行 sales_quote_add_item 观察者。但这是第一个产品,购物车尚未保存。我得到购物车数量的 Fore 代码返回 0。Thefore 解决方案是在处理订单之前保存购物车。代码示例如下:

public function modifyPrice(Varien_Event_Observer  $observer){
        $cart = Mage::getSingleton('checkout/cart');
        $cart->save();


        $quote_item = $observer->getQuoteItem();
    if ($quote_item->getProductType() == "virtual"){
            $new_price = (float)$quote_item->getProduct()->getPrice();
        $quote_item->setOriginalCustomPrice($new_price);

        $totalItemsInCart = Mage::helper('checkout/cart')->getItemsCount(); //Total items in cart
        Mage::log( "Total Product in Cart : " );  
        Mage::log( print_r($totalItemsInCart, true) );  

        $qty = 1;

        if($totalItemsInCart)   
        {               
            Mage::log( "Total Product in Cart : ".$totalItemsInCart );          
            $cart = Mage::getModel('checkout/cart')->getQuote()->getData();
            Mage::log( "Total Quantity In Cart    : ".(int)$cart['items_qty'] ); 
            $qty = (int)$cart['items_qty'];
        }






        $quote_item->setTotalPrice( $new_price * $qty );
        $quote_item->save();
    }

    return $this;
}

如您所见:

$cart = Mage::getSingleton('checkout/cart');
$cart->save();

这些是解决方案。

于 2012-11-01T04:50:10.813 回答
0

你可以试试这个代码,如果不起作用让我通知

$totalItemsInCart = Mage::helper('checkout/cart')->getItemsCount(); //Total items in cart

if($totalItemsInCart)   
{               
    echo "Total Product in Cart : ".$totalItemsInCart;          
    $cart = Mage::getModel('checkout/cart')->getQuote()->getData();
    echo "Total Quantity In Cart    : ".(int)$cart['items_qty'];    
}
于 2012-10-30T04:53:56.613 回答