/** * @param array $arguments * @param string $className * @return Mage_Core_Model_Layout */ public function createLayout(array $arguments = array(), $className = self::CLASS_NAME) { // because layout singleton was used everywhere in magento code, in observers, models, blocks, etc. // the only way how we can replace default layout object with custom one is to save instance of custom layout // to instance manager storage using default layout class name as alias $createLayout = true; if (isset($arguments['area'])) { if ($this->_objectManager->hasSharedInstance(self::CLASS_NAME)) { /** @var $layout Mage_Core_Model_Layout */ $layout = $this->_objectManager->get(self::CLASS_NAME); if ($arguments['area'] != $layout->getArea()) { $this->_objectManager->removeSharedInstance(self::CLASS_NAME); } else { $createLayout = false; } } } if ($createLayout) { $layout = $this->_objectManager->create($className, $arguments, false); $this->_objectManager->addSharedInstance($layout, self::CLASS_NAME); } return $this->_objectManager->get(self::CLASS_NAME); }