我正在编写一个扩展程序,一旦您将项目添加到购物车,就会将相关产品添加到购物车中。例如,如果您正在购买笔,我将在购物车中添加纸张。捆绑的包不是一个选项,因为我需要匹配某些条件。我尝试了以下方法:
我设置了一个事件监听器" sales_quote_item_collection_products_after_load "扫描购物车中的所有产品并添加相关产品。可悲的是,你必须重新装载购物车才能使产品出现。
我在我的事件监听器中使用此代码将产品添加到购物车:
// Get cart instance
$cart = Mage::getSingleton('checkout/cart');
$cart->init();
// Add a product (simple); id:12, qty: 3
$cart->addProduct(12, 3);
$cart->save()
奇怪的是,使用购物车助手移除产品(无需刷新):
$cartHelper = Mage::helper('checkout/cart');
$items = $cartHelper->getCart()->getItems();
foreach ($items as $item) {
if ($item->getProduct()->getId() == $productId) {
$itemId = $item->getItemId();
$cartHelper->getCart()->removeItem($itemId)->save();
break;
}
}
有没有办法告诉Magento"重新引用"或者你会推荐什么?我还考虑在添加到购物车的监听器中添加产品。但在这种情况下,我需要在更新和删除时实现它,因此它将正常工作。加载后使用 sales_quote_item_collection_products_after_load 似乎是最好的选择,因为我把所有东西放在一个地方。
答案 0 :(得分:0)
您需要更改代码
$product_model = Mage::getModel('catalog/product');
$product_id =35;
$my_product = $product_model->load($product_id);
$cart = Mage::getModel('checkout/cart');
$cart->init();
$cart->addProduct($my_product, array('qty' => 1));
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);