/** * Renders CMS page * * @param Mage_Core_Controller_Front_Action $action * @param integer $pageId * @param bool $renderLayout * @return boolean */ protected function _renderPage(Mage_Core_Controller_Varien_Action $action, $pageId = null, $renderLayout = true) { $page = Mage::getSingleton('cms/page'); if (!is_null($pageId) && $pageId !== $page->getId()) { $delimeterPosition = strrpos($pageId, '|'); if ($delimeterPosition) { $pageId = substr($pageId, 0, $delimeterPosition); } $page->setStoreId(Mage::app()->getStore()->getId()); if (!$page->load($pageId)) { return false; } } if (!$page->getId()) { return false; } $inRange = Mage::app()->getLocale()->isStoreDateInInterval(null, $page->getCustomThemeFrom(), $page->getCustomThemeTo()); if ($page->getCustomTheme()) { if ($inRange) { list($package, $theme) = explode('/', $page->getCustomTheme()); Mage::getSingleton('core/design_package')->setPackageName($package)->setTheme($theme); } } $action->getLayout()->getUpdate()->addHandle('default')->addHandle('cms_page'); $action->addActionLayoutHandles(); if ($page->getRootTemplate()) { $handle = $page->getCustomRootTemplate() && $page->getCustomRootTemplate() != 'empty' && $inRange ? $page->getCustomRootTemplate() : $page->getRootTemplate(); $action->getLayout()->helper('page/layout')->applyHandle($handle); } Mage::dispatchEvent('cms_page_render', array('page' => $page, 'controller_action' => $action)); $action->loadLayoutUpdates(); $layoutUpdate = $page->getCustomLayoutUpdateXml() && $inRange ? $page->getCustomLayoutUpdateXml() : $page->getLayoutUpdateXml(); $action->getLayout()->getUpdate()->addUpdate($layoutUpdate); $action->generateLayoutXml()->generateLayoutBlocks(); $contentHeadingBlock = $action->getLayout()->getBlock('page_content_heading'); if ($contentHeadingBlock) { $contentHeadingBlock->setContentHeading($page->getContentHeading()); } if ($page->getRootTemplate()) { $action->getLayout()->helper('page/layout')->applyTemplate($page->getRootTemplate()); } foreach (array('catalog/session', 'checkout/session') as $class_name) { $storage = Mage::getSingleton($class_name); if ($storage) { $action->getLayout()->getMessagesBlock()->addMessages($storage->getMessages(true)); } } if ($renderLayout) { $action->renderLayout(); } return true; }
/** * @magentoAppIsolation enabled */ public function testAddActionLayoutHandles() { $this->_model->getRequest()->setRouteName('test')->setControllerName('controller')->setActionName('action'); $this->_model->addActionLayoutHandles(); $handles = $this->_model->getLayout()->getUpdate()->getHandles(); $this->assertContains('test_controller_action', $handles); }
/** * Renders CMS page * * @param Mage_Core_Controller_Front_Action|Mage_Core_Controller_Varien_Action $action * @param integer $pageId * @param bool $renderLayout * @return boolean */ protected function _renderPage(Mage_Core_Controller_Varien_Action $action, $pageId = null, $renderLayout = true) { $page = Mage::getSingleton('Mage_Cms_Model_Page'); if (!is_null($pageId) && $pageId !== $page->getId()) { $delimeterPosition = strrpos($pageId, '|'); if ($delimeterPosition) { $pageId = substr($pageId, 0, $delimeterPosition); } $page->setStoreId(Mage::app()->getStore()->getId()); if (!$page->load($pageId)) { return false; } } if (!$page->getId()) { return false; } $inRange = Mage::app()->getLocale()->isStoreDateInInterval(null, $page->getCustomThemeFrom(), $page->getCustomThemeTo()); if ($page->getCustomTheme()) { if ($inRange) { Mage::getDesign()->setDesignTheme($page->getCustomTheme()); } } $action->addPageLayoutHandles(array('id' => $page->getIdentifier())); $action->addActionLayoutHandles(); if ($page->getRootTemplate()) { $handle = $page->getCustomRootTemplate() && $page->getCustomRootTemplate() != 'empty' && $inRange ? $page->getCustomRootTemplate() : $page->getRootTemplate(); $action->getLayout()->helper('Mage_Page_Helper_Layout')->applyHandle($handle); } Mage::dispatchEvent('cms_page_render', array('page' => $page, 'controller_action' => $action)); $action->loadLayoutUpdates(); $layoutUpdate = $page->getCustomLayoutUpdateXml() && $inRange ? $page->getCustomLayoutUpdateXml() : $page->getLayoutUpdateXml(); if (!empty($layoutUpdate)) { $action->getLayout()->getUpdate()->addUpdate($layoutUpdate); } $action->generateLayoutXml()->generateLayoutBlocks(); $contentHeadingBlock = $action->getLayout()->getBlock('page_content_heading'); if ($contentHeadingBlock) { $contentHeading = $this->escapeHtml($page->getContentHeading()); $contentHeadingBlock->setContentHeading($contentHeading); } if ($page->getRootTemplate()) { $action->getLayout()->helper('Mage_Page_Helper_Layout')->applyTemplate($page->getRootTemplate()); } /* @TODO: Move catalog and checkout storage types to appropriate modules */ $messageBlock = $action->getLayout()->getMessagesBlock(); foreach (array('Mage_Catalog_Model_Session', 'Mage_Checkout_Model_Session', 'Mage_Customer_Model_Session') as $storageType) { $storage = Mage::getSingleton($storageType); if ($storage) { $messageBlock->addStorageType($storageType); $messageBlock->addMessages($storage->getMessages(true)); } } if ($renderLayout) { $action->renderLayout(); } return true; }
/** * Render the suggestions block to be added into the response. * @param Mage_Core_Controller_Varien_Action $controller * @return string - rendered block */ protected function _getAddressBlockHtml(Mage_Core_Controller_Varien_Action $controller) { $layout = $controller->getLayout(); $update = $layout->getUpdate(); $update->load('checkout_onepage_address_suggestions'); $layout->generateXml(); $layout->generateBlocks(); $output = $layout->getOutput(); return $output; }
/** * @magentoAppIsolation enabled */ public function testAddPageLayoutHandles() { $this->_model->getRequest()->setRouteName('test')->setControllerName('controller')->setActionName('action'); //$this->_model->addPageLayoutHandles(array()); $this->assertEmpty($this->_model->getLayout()->getUpdate()->getHandles()); $this->_model->getRequest()->setRouteName('catalog')->setControllerName('product')->setActionName('view'); $this->_model->addPageLayoutHandles(array('type' => 'simple')); $handles = $this->_model->getLayout()->getUpdate()->getHandles(); $this->assertContains('default', $handles); $this->assertContains('catalog_product_view', $handles); $this->assertContains('catalog_product_view_type_simple', $handles); }
/** * Retrieve the minicart_head block's html * @param Mage_Core_Controller_Varien_Action $controllerAction the request's controller * @return string */ protected function _getMinicartHtml($controllerAction) { $controllerAction->loadLayout(); $sidebar = $controllerAction->getLayout()->getBlock('minicart_head'); if ($sidebar) { $sidebarHtml = Mage::getSingleton('core/url')->sessionUrlVar($sidebar->toHtml()); return '<div class="header-minicart minicart--fixed">' . $sidebarHtml . '</div>'; } return ''; }
/** * Retrieve the minicart_head block's html * @param Mage_Core_Controller_Varien_Action $controllerAction the request's controller * @return string */ protected function _getMinicartHtml($controllerAction) { $controllerAction->loadLayout(); $sidebar = $controllerAction->getLayout()->getBlock('minicart_head')->toHtml(); return '<div class="header-minicart minicart--fixed">' . $sidebar . '</div>'; }