在尝试将多个产品添加到购物车的一些泡菜中,实际上我有一个带有表单元素的块,用于定义添加到购物车的产品(免费产品,由观察者事件处理) 。将产品价格更改为免费的观察员活动工作正常,但是通过以下方法向购物车添加多个产品会很麻烦:
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();
}
}
答案 0 :(得分: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
答案 1 :(得分:0)
我也遇到了这个问题,你需要声明
$cart = Mage::getModel('checkout/cart');
在foreach里面。我不确定它为什么会起作用,但它似乎对我有用。
答案 2 :(得分: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();