将多余的产品添加到购物车(观察员)
问题描述:
我尝试添加额外的产品到购物车。我为此创建了一个观察者。将多余的产品添加到购物车(观察员)
<?php
class WP_Plugadapter_Model_Observer
{
public function hookToControllerActionPostDispatch($observer)
{
if($observer->getEvent()->getControllerAction()->getFullActionName() == 'checkout_cart_add')
{
Mage::dispatchEvent("add_to_cart_after", array('request' => $observer->getControllerAction()->getRequest()));
}
}
public function hookToAddToCartAfter($observer)
{
$request = $observer->getEvent()->getRequest()->getParams();
$_product = Mage::getModel('catalog/product')->load($request['product']);
$extra_functions = $_product->getExtra_functions();
if(!empty($extra_functions)){
$extra_functions = explode(',', $extra_functions);
if(array_search('121', $extra_functions)){
$cart = Mage::getSingleton('checkout/cart');
$cart->addProduct(10934, 1);
$cart->save();
if (!$cart->getQuote()->getHasError()){
Mage::log("Product ADD TO CART is added to cart.");
}else{
Mage::log("BOEM");
}
}
}
}
}
当我检查我的系统日志时,我看到以下日志消息。 产品已加入购物车添加到购物车。
我不知道我做错了什么。当加载脚本独立它工作正常。 例如:
<?php
include_once '../app/Mage.php';
Mage::app();
umask(0);
$session = Mage::getSingleton('core/session', array('name'=>'frontend'));
$cart = Mage::getSingleton('checkout/cart');
$cart->addProduct(10934, 1);
$cart->save();
是否有可能在一个观察者,你把它做它用不同的方式?
答
问题在于购物车的报价对象没有保存到数据库,后来在请求处理中被来自会话的报价对象覆盖。为什么购物车报价没有保存是相当混乱的。报价模型的save
方法预计内部属性_hasDataChanges
设置为true。但是,即使产品已添加到报价中,该属性仍然为false。
您可以强制该属性通过使用setData
方法添加一些数据(任何财产会做)的报价被设置为真:
$cart = Mage::getSingleton('checkout/cart');
$cart->addProduct(10934, 1);
//force _hasDataChanges to true
$cart->getQuote()->setData('updated', true);
$cart->save();
或者您可以使用结账会话引用对象将产品添加到购物车
if(array_search('121', $extra_functions)){
$cart = Mage::getSingleton('checkout/cart');
$qty = 1;
$quote = Mage::getSingleton('checkout/session')->getQuote()
->addProduct(
Mage::getModel('catalog/product')->load(10934),
$qty)
->save();
$cart->save();
if (!$cart->getQuote()->getHasError()){
Mage::log("Product ADD TO CART is added to cart.");
}else{
Mage::log("BOEM");
}
}
+0
感谢您的好信息:)。它的工作。 – Lexperts 2013-02-14 08:23:35
日志消息是不是表示一切都确实正常?当购物车没有错误时记录它。 – 2013-02-13 15:44:51
是的。但没有任何反应:(。 – Lexperts 2013-02-13 15:50:51