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...