顧客が Magento ショップで (例として) 1 つの製品を無料で提供できるようにする必要があります。この投稿からほとんどのことを理解しましたが、今、1 つの問題があります。で実行される Observer メソッドを作成しました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 価格 (例としての製品) で製品をカートに追加します。その部分は正常に機能するため、ここには掲載されていません。2 番目の部分 (上に投稿したもの) では、既存の製品を削除し、通常価格の製品に置き換える必要があります。1 つのことを除いて、ほとんどすべてが正常に機能します。行$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
(上書きする)方が良いでしょうか?私の言語で申し訳ありません。回答ありがとうございます。誰かが私を助けてくれることを願っています...