将产品添加到购物车时,Magento相关产品

时间:2014-12-21 21:39:12

标签: magento magento-1.7 magento-1.8

我正在编写一个扩展程序,一旦您将项目添加到购物车,就会将相关产品添加到购物车中。例如,如果您正在购买笔,我将在购物车中添加纸张。捆绑的包不是一个选项,因为我需要匹配某些条件。我尝试了以下方法:

我设置了一个事件监听器" 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 似乎是最好的选择,因为我把所有东西放在一个地方。

1 个答案:

答案 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);