在magento中添加新产品时从购物车中删除商品

时间:2015-05-29 11:08:01

标签: php magento

我想在添加新产品时从购物车中删除商品。我正在观察:checkout_cart_add_product_complete事件。我的代码如下:

<checkout_cart_add_product_complete>
    <observers>
        <secodaryproduct>
            <type>singleton</type>
            <class>secodaryproduct/observer</class>
            <method>checkoutCartAddProductAddComplete</method>
        </secodaryproduct>
    </observers>
</checkout_cart_add_product_complete>

删除产品:

 $quote = Mage::getSingleton('checkout/cart'); 
 $quote->removeItem($product['item_id']);
 $quote->save();

当我在没有观察者的情况下调用此代码时,这样可以正常工作并删除所需的项目。但是,如果我使用观察者使用此项,则不会从购物车中删除项目。我还将输出放在日志文件中,项目ID正确打印但我的项目没有从购物车中删除。 请帮忙。

1 个答案:

答案 0 :(得分:0)

Mage::dispatchEvent('checkout_cart_add_product_complete', ...)中调用/checkout/cart/add时,相关的Mage_Catalog_Model_Product实例将传递给事件观察者。因此,您应该可以执行以下操作,这将删除与该产品ID匹配的所有购物车项目:

public function checkoutCartAddProductAddComplete(Varien_Event_Observer $observer)
{
    /* @var Mage_Catalog_Model_Product $product */
    $product = $observer->getProduct();
    /* @var Mage_Checkout_Model_Cart $cart */
    $cart = Mage::getSingleton('checkout/cart');
    $cartItems = $cart->getItems();
    /* @var Mage_Sales_Model_Quote_Item $item */
    foreach ($cartItems as $item) {
        if ($item->getProductId() == $product->getId()) {
            $cart->removeItem($item->getId());
        }
    }
    $cart->save();
}