/** * Append the CMS page viewed identifier and title to the list of tracked variables * * @return array */ public function getVariables() { $variables = []; if ($this->page->getId()) { $variables['cms.identifier'] = $this->page->getIdentifier(); $variables['cms.title'] = $this->page->getTitle(); } return $variables; }
/** * 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()); } } $this->_view->getLayout()->getUpdate()->addHandle('default')->addHandle('cms_page_view'); $this->_view->addPageLayoutHandles(array('id' => $this->_page->getIdentifier())); $this->_view->addActionLayoutHandles(); if ($this->_page->getRootTemplate()) { if ($this->_page->getCustomRootTemplate() && $this->_page->getCustomRootTemplate() != 'empty' && $inRange) { $handle = $this->_page->getCustomRootTemplate(); } else { $handle = $this->_page->getRootTemplate(); } $this->_pageLayout->applyHandle($handle); } $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); } if ($this->_page->getRootTemplate()) { $this->_pageLayout->applyTemplate($this->_page->getRootTemplate()); } /* @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; }
/** * Return result CMS page * * @param Action $action * @param null $pageId * @return \Magento\Framework\View\Result\Page|bool */ public function prepareResultPage(Action $action, $pageId = null) { if ($pageId !== null && $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()); } } /** @var \Magento\Framework\View\Result\Page $resultPage */ $resultPage = $this->resultPageFactory->create(); $this->setLayoutType($inRange, $resultPage); $resultPage->addHandle('cms_page_view'); $resultPage->addPageLayoutHandles(['id' => $this->_page->getIdentifier()]); $this->_eventManager->dispatch('cms_page_render', ['page' => $this->_page, 'controller_action' => $action]); if ($this->_page->getCustomLayoutUpdateXml() && $inRange) { $layoutUpdate = $this->_page->getCustomLayoutUpdateXml(); } else { $layoutUpdate = $this->_page->getLayoutUpdateXml(); } if (!empty($layoutUpdate)) { $resultPage->getLayout()->getUpdate()->addUpdate($layoutUpdate); } $contentHeadingBlock = $resultPage->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 = $resultPage->getLayout()->getMessagesBlock(); $messageBlock->addStorageType($this->messageManager->getDefaultGroup()); $messageBlock->addMessages($this->messageManager->getMessages(true)); return $resultPage; }
/** * Create url rewrite object * * @param int $storeId * @param string|null $redirectType Null or one of OptionProvider const * @return UrlRewrite */ protected function createUrlRewrite($storeId, $redirectType = null) { return $this->converter->convertArrayToObject([UrlRewrite::ENTITY_TYPE => self::ENTITY_TYPE, UrlRewrite::ENTITY_ID => $this->cmsPage->getId(), UrlRewrite::STORE_ID => $storeId, UrlRewrite::REQUEST_PATH => $this->cmsPage->getIdentifier(), UrlRewrite::TARGET_PATH => 'cms/page/view/page_id/' . $this->cmsPage->getId(), UrlRewrite::REDIRECT_TYPE => $redirectType]); }
/** * Generate CMS page url key based on url_key entered by merchant or page title * * @param \Magento\Cms\Model\Page $cmsPage * @return string */ public function generateUrlKey($cmsPage) { $urlKey = $cmsPage->getIdentifier(); return $this->filterManager->translitUrl($urlKey === '' || $urlKey === null ? $cmsPage->getTitle() : $urlKey); }
/** * Create url rewrite object * * @param int $storeId * @param int $redirectType * @return \Magento\UrlRewrite\Service\V1\Data\UrlRewrite */ protected function createUrlRewrite($storeId, $redirectType = 0) { return $this->urlRewriteFactory->create()->setStoreId($storeId)->setEntityType(self::ENTITY_TYPE)->setEntityId($this->cmsPage->getId())->setRequestPath($this->cmsPage->getIdentifier())->setTargetPath($this->cmsPageUrlPathGenerator->getCanonicalUrlPath($this->cmsPage))->setIsAutogenerated(1)->setRedirectType($redirectType); }
/** * Prepare breadcrumbs * * @param \Magento\Cms\Model\Page $page * @throws \Magento\Framework\Exception\LocalizedException * @return void */ protected function _addBreadcrumbs(\Magento\Cms\Model\Page $page) { if ($this->_scopeConfig->getValue('web/default/show_cms_breadcrumbs', ScopeInterface::SCOPE_STORE) && ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs')) && $page->getIdentifier() !== $this->_scopeConfig->getValue('web/default/cms_home_page', ScopeInterface::SCOPE_STORE) && $page->getIdentifier() !== $this->_scopeConfig->getValue('web/default/cms_no_route', ScopeInterface::SCOPE_STORE)) { $breadcrumbsBlock->addCrumb('home', ['label' => __('Home'), 'title' => __('Go to Home Page'), 'link' => $this->_storeManager->getStore()->getBaseUrl()]); $breadcrumbsBlock->addCrumb('cms_page', ['label' => $page->getTitle(), 'title' => $page->getTitle()]); } }
/** * Get request path * * @param \Magento\Cms\Model\Page $cmsPage * @return string */ public function generateRequestPath($cmsPage) { return $cmsPage->getIdentifier(); }