/** * Renders CMS page * * @param Action $action * @param int $pageId * @param bool $renderLayout * @return bool */ protected function _renderPage(Action $action, $pageId = null, $renderLayout = true) { if (!is_null($pageId) && $pageId !== $this->_page->getId()) { $delimiterPosition = strrpos($pageId, '|'); if ($delimiterPosition) { $pageId = substr($pageId, 0, $delimiterPosition); } $this->_page->setStoreId($this->_storeManager->getStore()->getId()); if (!$this->_page->load($pageId)) { return false; } } if (!$this->_page->getId()) { return false; } $inRange = $this->_localeDate->isScopeDateInInterval(null, $this->_page->getCustomThemeFrom(), $this->_page->getCustomThemeTo()); if ($this->_page->getCustomTheme()) { if ($inRange) { $this->_design->setDesignTheme($this->_page->getCustomTheme()); } } if ($this->_page->getPageLayout()) { if ($this->_page->getCustomPageLayout() && $this->_page->getCustomPageLayout() != 'empty' && $inRange) { $handle = $this->_page->getCustomPageLayout(); } else { $handle = $this->_page->getPageLayout(); } $this->pageConfig->setPageLayout($handle); } $this->_view->getPage()->initLayout(); $this->_view->getLayout()->getUpdate()->addHandle('cms_page_view'); $this->_view->addPageLayoutHandles(array('id' => $this->_page->getIdentifier())); $this->_eventManager->dispatch('cms_page_render', array('page' => $this->_page, 'controller_action' => $action)); $this->_view->loadLayoutUpdates(); if ($this->_page->getCustomLayoutUpdateXml() && $inRange) { $layoutUpdate = $this->_page->getCustomLayoutUpdateXml(); } else { $layoutUpdate = $this->_page->getLayoutUpdateXml(); } if (!empty($layoutUpdate)) { $this->_view->getLayout()->getUpdate()->addUpdate($layoutUpdate); } $this->_view->generateLayoutXml()->generateLayoutBlocks(); $contentHeadingBlock = $this->_view->getLayout()->getBlock('page_content_heading'); if ($contentHeadingBlock) { $contentHeading = $this->_escaper->escapeHtml($this->_page->getContentHeading()); $contentHeadingBlock->setContentHeading($contentHeading); } /* @TODO: Move catalog and checkout storage types to appropriate modules */ $messageBlock = $this->_view->getLayout()->getMessagesBlock(); $messageBlock->addStorageType($this->messageManager->getDefaultGroup()); $messageBlock->addMessages($this->messageManager->getMessages(true)); if ($renderLayout) { $this->_view->renderLayout(); } return true; }
/** * Inits layout for viewing product page * * @param \Magento\Catalog\Model\Product $product * @param \Magento\Framework\App\Action\Action $controller * @param null|\Magento\Framework\Object $params * * @return \Magento\Catalog\Helper\Product\View */ public function initProductLayout($product, $controller, $params = null) { $settings = $this->_catalogDesign->getDesignSettings($product); if ($settings->getCustomDesign()) { $this->_catalogDesign->applyCustomDesign($settings->getCustomDesign()); } $update = $this->_view->getLayout()->getUpdate(); $update->addHandle('default'); if ($params && $params->getBeforeHandles()) { foreach ($params->getBeforeHandles() as $handle) { $this->_view->addPageLayoutHandles(array('id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()), $handle); } } $this->_view->addPageLayoutHandles(array('id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId())); if ($params && $params->getAfterHandles()) { foreach ($params->getAfterHandles() as $handle) { $this->_view->addPageLayoutHandles(array('id' => $product->getId(), 'sku' => $product->getSku(), 'type' => $product->getTypeId()), $handle); } } $this->_view->loadLayoutUpdates(); // Apply custom layout update once layout is loaded $layoutUpdates = $settings->getLayoutUpdates(); if ($layoutUpdates) { if (is_array($layoutUpdates)) { foreach ($layoutUpdates as $layoutUpdate) { $update->addUpdate($layoutUpdate); } } } $this->_view->generateLayoutXml(); $this->_view->generateLayoutBlocks(); // Apply custom layout (page) template once the blocks are generated if ($settings->getPageLayout()) { $this->_pageLayout->applyTemplate($settings->getPageLayout()); } $currentCategory = $this->_coreRegistry->registry('current_category'); $root = $this->_view->getLayout()->getBlock('root'); if ($root) { $controllerClass = $this->_request->getFullActionName(); if ($controllerClass != 'catalog-product-view') { $root->addBodyClass('catalog-product-view'); } $root->addBodyClass('product-' . $product->getUrlKey()); if ($currentCategory instanceof \Magento\Catalog\Model\Category) { $root->addBodyClass('categorypath-' . $currentCategory->getUrlPath())->addBodyClass('category-' . $currentCategory->getUrlKey()); } } return $this; }