使用magento中的观察者删除购物车产品

时间:2015-05-07 07:10:42

标签: magento

我想使用观察者删除购物车产品。

我能够获得当前购物车的所有产品但经过多次尝试后我无法使用观察者从购物车中删除产品。 甚至还尝试使用查询删除产品,但产品未被删除。

<?xml version="1.0"?>
<config>
    <modules>
        <Check_Price>
            <version>0.0.1</version>
        </Check_Price>
    </modules>
    <global>
        <models>
            <checkprice>
                <class>Observerexample_Model</class>
            </checkprice>
        </models>
        <events>
            <sales_order_place_before>
                <observers>
                    <check_price_model_observer>
                        <type>singleton</type>
                        <class>Check_Price_Model_Observer</class>
                        <method>example</method>
                    </check_price_model_observer>
                </observers>
            </sales_order_place_before> 
        </events>
    </global>
</config>

我在观察者中使用过这段代码: -

 $event = $observer->getEvent();
         $order = $event->getOrder();
         $items = $order->getQuote()->getAllItems();        
         foreach ($items as $item) {
           if($item->getProduct()->getFinalPrice()==0){

             ??
           }          
         }

我有像itemID,quoteID这样的东西 如何从购物车中删除产品。

2 个答案:

答案 0 :(得分:0)

config.xml中有很多问题

1.Model前缀问题: 所有模型前缀类的第1个是不对的。它应该是

<models>
            <checkprice>
                <class>Check_Price_Model_Model</class>
            </checkprice>
        </models>

来自

<models>
    <checkprice>
        <class>Observerexample_Model</class>
    </checkprice>
</models>

问题2: sales_order_place_before事件是针对订单所在的所有情况调用的。只要$orderObject将其命名为函数place()函数,就会调用它。你在班级Mage_Sales_Model_Order看到了。 最好使用事件checkout_submit_all_after

答案 1 :(得分:0)

您可以按项目ID删除购物车项目。以下是如何删除ID = 1的项目:

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

以下是删除所有项目的方法:

$quote = $cart->getQuote();
$cartItems = $quote->getAllVisibleItems();
foreach ($cartItems as $cartItem){
   $cart->removeItem($cartItem->getId());
}