1

顧客が 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(上書きする)方が良いでしょうか?私の言語で申し訳ありません。回答ありがとうございます。誰かが私を助けてくれることを願っています...

4

1 に答える 1

0

同じ問題に遭遇する人のために、私の質問に答えて説明します。コード:

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

その前に呼び出し$cart->save()て、その後に同じことをしようとしたため、機能しません。それが問題でした。最初に削除$cart->save()すると、問題なく動作します。

于 2012-05-23T14:44:41.403 に答える