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