0

在尝试将多个产品添加到购物车的过程中,实际上我有一个带有表单元素的块,该元素定义了添加到购物车的产品(免费产品,由观察者事件处理)。将产品价格更改为免费的观察者事件运行良好,但是使用以下方法将多个产品添加到购物车被证明很麻烦:

public function addFreeItems($observer) {
$cart = Mage::getSingleton('checkout/cart');
$freeItems = $_SESSION['package_free_item'];
$freeItemSplit = explode(",", $freeItems);
try {
    foreach ($freeItemSplit as $product) {
        $product = Mage::getModel('catalog/product')->load($product);
        $cart->addProduct($product, array('qty' => '1'));
        $cart->save();
    }
} catch(Exception $e) {
       Mage::log($e->getMessage());
       echo $e->getMessage();
    }
} 

该方法适用于单个项目并且可以很好地添加,但是后续项目(明确定义在位置 [1] 的数组中)不会添加到购物车。

我不知道为什么这在技术上不能正常工作。在添加过程中没有发现异常,并且调试还显示该数组填充了两个项目。

谁能说明为什么这不起作用?

谢谢!

XML 更新:

<sales_quote_add_item>
        <observers>
            <priceupdate_observer>
                <type>singleton</type>
                <class>Edge_Package_Model_ObserverPrice</class>
                <method>updatePrice</method>
            </priceupdate_observer>
        </observers>
</sales_quote_add_item>

它有效地更新了包裹的定价,但也从其中调用了添加免费产品。

编辑2:

public function addFreeItems($observer) {
$route = Mage::app()->getFrontController()->getRequest()->getRouteName();
if($route == "packages" && $_SESSION['package_free_item'] != null ) {
    $freeItems = $_SESSION['package_free_item'];
    $product_ids = explode(",", $freeItems);
    $cart = Mage::getSingleton('checkout/cart');
        foreach ($product_ids as $product_id) {
        $product = Mage::getModel('catalog/product')->load($product_id);
        $cart->addProduct($product, array('qty' => '1', 'product_id' => $product->getId()));  
        }
    $cart->save();
    }
}
4

3 回答 3

0
<checkout_cart_product_add_after>
        <observers>
            <priceupdate_observer>
                <type>singleton</type>
                <class>Edge_Package_Model_ObserverPrice</class>
                <method>updatePrice</method>
            </priceupdate_observer>
        </observers>
</checkout_cart_product_add_after>

public function addFreeItems($observer) {
   $quote = Mage::getSingleton('checkout/session')->getQuote();
   //foreach loop
   $quote->addProduct($product, array('qty' => '1', 'product_id' => $product->getId()));
}

请参阅 /app/code/core/Mage/Checkout/Model/Cart.php 中的方法 addProduct

请参阅http://magentocommerce.com/boards/viewthread/39334

于 2012-12-04T11:41:45.883 回答
0

我也遇到过这个,你需要声明

$cart = Mage::getModel('checkout/cart');

在foreach里面。我不确定它为什么有效,但它似乎对我有用。

于 2013-10-25T01:48:45.653 回答
0

可能这个会有所帮助:

http://deepakbhatta.com/magento-add-multiple-items-to-cart/

 $cart = Mage::helper('checkout/cart')->getCart();
        $ms="";
        foreach($validProducts as $sku => $qty) {
            $params = array('qty' => $qty);
            $id = Mage::getModel('catalog/product')->getIdBySku($sku);
            $product = Mage::getModel('catalog/product')->load($id);;
            $cart->addProduct($product, $params);
            $msg .= $product->getName(). " is successfully added into cart<br>";
        }
         $cart->save();
于 2014-10-25T03:51:50.577 回答