从magento中添加新商品时删除商品
我想添加新商品时从购物车中删除商品。我正在观察: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正确打印,但我的项目不会从购物车中删除。 请帮忙。
当在/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();
}
我有要删除的项目的项目标识,但由于某种原因无法执行删除操作。根据你给出的解决方案,我可以得到物品ID,但删除仍然无法正常工作。 –
@GaganpreetKaur - 在您的示例中'$ product ['item_id']'不会在事件'checkout_cart_add_product_complete'中设置。我更新了我的示例,在删除项目后有'$ cart-> save()',因为我之前将它们放在一起,但未测试它。现在它可以删除任何匹配传递给活动的产品ID **的购物车商品。你将不得不修改它以适应你的需求。 – fantasticrice
$ product ['item_id']'从哪里来?请注意,您必须使用引号项目的id通过'Mage_Sales_Model_Quote :: removeItem($ itemId)'将其删除,而不是某种产品ID。 –
是$ product ['item_id']是“sales_flat_quote_item”记录的标识。并且我已经在日志文件中打印了项目标识,并且显示正确。在checkout_cart_add_product_complete事件的情况下,只有删除查询不起作用,但在checkout_cart_update_items_after和sales_quote_remove_item事件的情况下,此功能正常工作。 –