magento - Add extra item to the cart (observer) -
magento - Add extra item to the cart (observer) -
i seek add together product cart. have created observer this.
<?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 together cart added cart."); }else{ mage::log("boem"); } } } } }
when check mine scheme log see next log message. product add together cart added cart.
i have no clue i'm doing wrong. when load script standalone it's working fine. example:
<?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();
is possible in observer have in different way?
the problem cart's quote object not saved database , later in request processing overwritten quote object session. why cart quote not saved quite confusing. save
method of quote model expects internal property _hasdatachanges
set true. property is, however, remains @ false, though product added quote.
you can forcefulness property set true adding info (any property do) quote using setdata
method:
$cart = mage::getsingleton('checkout/cart'); $cart->addproduct(10934, 1); //force _hasdatachanges true $cart->getquote()->setdata('updated', true); $cart->save();
alternatively can utilize checkout session quote object add together product cart
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 together cart added cart."); }else{ mage::log("boem"); } }
magento
Comments
Post a Comment