doutuan4361 2012-04-09 15:54
浏览 45
已采纳

在观察者中将产品添加到购物车

I need to create a possibility for customers to offer a one product free of charge (as an example) in Magento shop. I figured out most of things from this post, but now I have one problem. I am created an Observer method that is executed on checkout_cart_product_add_after. And there I have some code (its just a part of whole thing):

    $productId = $observer->getProduct()->getId();
    $cartHelper = Mage::helper('checkout/cart');
    $items = $cartHelper->getCart()->getItems();
    Mage::getModel('core/session')->addNotice('Product id: '.$productId);
    foreach ($items as $item) {
         if ($item->getProduct()->getId() == $productId) {
              $itemId = $item->getItemId();
              $cart = $cartHelper->getCart()->removeItem($itemId)->save() ;//It WORKS!!!!!!!!!!!!
              $product = Mage::getModel('catalog/product')->load($productId);
              $cart->addProduct($product, $this->_getRequest()->getParams());                    
                    $cart->save();
                    Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
                    break;
                }
            }

So first of all my code adds a product to cart with 0.00 price (product as an example) based on some request parameters. Thats part works fine so it is not posted here. The second part (that I posted above) must delete an existing product and replace it with product with normal price. Almost everything works fine except one thing - the line $cart->addProduct($product, $this->_getRequest()->getParams()); don't work and I cant understand why (no errors, no exceptions, no logs). _getRequest method looks like this:

    protected function _getRequest()
    {
        return Mage::app()->getRequest();
    } 

And if I log an $this->_getRequest()->getParams() there is will be something like this:

    2012-04-09T14:46:56+00:00 DEBUG (7): Array(
    [uenc] => aHR0cDovL2xvY2FsaG9zdC93b3AvZmVhdHVyZWQvY2xhc3NpYy1saW5lLXBvbHkuaHRtbA,,
    [product] => 50
    [related_product] => 
    [bundle_option] => Array(
            [20] => 75
            [21] => 84
            [22] => 94
        )
    [qty] => 1
    [send-request] => 0
)

So why that $cart->addProduct($product, $this->_getRequest()->getParams()); will not work? How to do it right? Maybe it is better to use addAction() of Mage_Checkout_CartController (overwrite it)? Sorry for my language. Thanks for answers. Hope somebody can help me...

  • 写回答

1条回答 默认 最新

  • douchen4915 2012-05-23 14:44
    关注

    I'll answer my question to clarify things for anybody, who will stumble the same problem. The code:

    $cart->addProduct($product, $this->_getRequest()->getParams());
    

    will not work because I call $cart->save() before it and than tried to do the same after it and that was the problem. When I removed first $cart->save() it is worked just fine.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?