2015-05-29 80 views
3

我想添加新商品時從購物車中刪除商品。我正在觀察:checkout_cart_add_product_complete事件。我的代碼如下:從magento中添加新商品時刪除商品

<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

$ product ['item_id']'從哪裏來?請注意,您必須使用引號項目的id通過'Mage_Sales_Model_Quote :: removeItem($ itemId)'將其刪除,而不是某種產品ID。 –

+0

是$ product ['item_id']是「sales_flat_quote_item」記錄的標識。並且我已經在日誌文件中打印了項目標識,並且顯示正確。在checkout_cart_add_product_complete事件的情況下,只有刪除查詢不起作用,但在checkout_cart_update_items_after和sales_quote_remove_item事件的情況下,此功能正常工作。 –

回答

0

當在/checkout/cart/add中調用Mage::dispatchEvent('checkout_cart_add_product_complete', ...)時,相關的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(); 
} 
+0

我有要刪除的項目的項目標識,但由於某種原因無法執行刪除操作。根據你給出的解決方案,我可以得到物品ID,但刪除仍然無法正常工作。 –

+0

@GaganpreetKaur - 在您的示例中'$ product ['item_id']'不會在事件'checkout_cart_add_product_complete'中設置。我更新了我的示例,在刪除項目後有'$ cart-> save()',因爲我之前將它們放在一起,但未測試它。現在它可以刪除任何匹配傳遞給活動的產品ID **的購物車商品。你將不得不修改它以適應你的需求。 – fantasticrice