我需要为客户创造一种可能性,让他们在 Magento 商店免费提供一种产品(例如)。我从这篇文章中弄清楚了大部分事情,但现在我遇到了一个问题。我创建了一个在checkout_cart_product_add_after
. 我有一些代码(它只是整个事情的一部分):
$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
覆盖它)更好?对不起我的语言。感谢您的回答。希望有人可以帮助我...