1

我需要为客户创造一种可能性,让他们在 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覆盖它)更好?对不起我的语言。感谢您的回答。希望有人可以帮助我...

4

1 回答 1

0

我会回答我的问题,为任何遇到同样问题的人澄清事情。编码:

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

将不起作用,因为我$cart->save()在它之前打电话而不是在它之后尝试做同样的事情,这就是问题所在。当我第一次删除时$cart->save(),它工作得很好。

于 2012-05-23T14:44:41.403 回答