Since I was recently asked how to avoid recursive calls in Magento observer classes when for instance calling save() in an xxx_save_after event observer: Simply use an internal processing flag.
class My_Products_Model_Observer { /** @var boolean flag to signal successful processing of current model entity */ private $_isProcessed = false; /** * Handle catalog_product_save_after event. * @param Varien_Event_Observer $observer */ public function catalog_product_save_after(Varien_Event_Observer $observer) { try { $product = $observer->getEvent()->getProduct(); // do some processing... if(!$_isProcessed) { $this->_isProcessed = true; // avoid recursion $product->save(); } } catch (Exception $e) { Mage::log($e->getMessage()); // do some logging } } }
That’s it – Sometimes things can be very simple 😉
Leave a Reply