我需要为客户创造一种在Magento商店免费提供一种产品(例如)的可能性。我从this帖子中找出了大部分内容,但现在我遇到了一个问题。我创建了一个在checkout_cart_product_add_after
上执行的Observer方法。在那里我有一些代码(它只是整个事情的一部分):
$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;
}
}
首先,我的代码根据一些请求参数将产品添加到购物车中,价格为0.00(产品为例)。这部分工作正常,所以它不会发布在这里。第二部分(我上面发布的)必须删除现有产品并将其替换为正常价格的产品。除了一件事之外几乎所有东西都工作正常 - 行$cart->addProduct($product, $this->_getRequest()->getParams());
不起作用,我无法理解为什么(没有错误,没有例外,没有日志)。
_getRequest
方法如下所示:
protected function _getRequest()
{
return Mage::app()->getRequest();
}
如果我记录$this->_getRequest()->getParams()
,那将会是这样的:
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
)
为什么$cart->addProduct($product, $this->_getRequest()->getParams());
不起作用?怎么做对了?也许最好使用addAction()
Mage_Checkout_CartController
(覆盖它)?
抱歉我的语言。谢谢你的回答。希望有人能帮助我...
答案 0 :(得分:0)
我会回答我的问题,为任何人解释事情,他们会遇到同样的问题。 代码:
$cart->addProduct($product, $this->_getRequest()->getParams());
将无法正常工作,因为我之前会调用$cart->save()
,而不是尝试在此之后执行相同操作,这就是问题所在。当我首先删除$cart->save()
时,它工作正常。