_page = $page; $this->_filterProvider = $filterProvider; $this->_storeManager = $storeManager; $this->_pageFactory = $pageFactory; $this->pageConfig = $pageConfig; } /** * Retrieve Page instance * * @return \Magento\Cms\Model\Page */ public function getPage() { if (!$this->hasData('page')) { if ($this->getPageId()) { /** @var \Magento\Cms\Model\Page $page */ $page = $this->_pageFactory->create(); $page->setStoreId($this->_storeManager->getStore()->getId())->load($this->getPageId(), 'identifier'); } else { $page = $this->_page; } $this->setData('page', $page); } return $this->getData('page'); } /** * Prepare global layout * * @return $this */ protected function _prepareLayout() { $page = $this->getPage(); $this->_addBreadcrumbs($page); $this->pageConfig->addBodyClass('cms-' . $page->getIdentifier()); $metaTitle = $page->getMetaTitle(); $this->pageConfig->getTitle()->set($metaTitle ? $metaTitle : $page->getTitle()); $this->pageConfig->setKeywords($page->getMetaKeywords()); $this->pageConfig->setDescription($page->getMetaDescription()); $pageMainTitle = $this->getLayout()->getBlock('page.main.title'); if ($pageMainTitle) { // Setting empty page title if content heading is absent $cmsTitle = $page->getContentHeading() ?: ' '; $pageMainTitle->setPageTitle($this->escapeHtml($cmsTitle)); } return parent::_prepareLayout(); } /** * Prepare breadcrumbs * * @param \Magento\Cms\Model\Page $page * @throws \Magento\Framework\Exception\LocalizedException * @return void */ protected function _addBreadcrumbs(\Magento\Cms\Model\Page $page) { $homePageIdentifier = $this->_scopeConfig->getValue( 'web/default/cms_home_page', ScopeInterface::SCOPE_STORE ); $homePageDelimiterPosition = strrpos($homePageIdentifier, '|'); if ($homePageDelimiterPosition) { $homePageIdentifier = substr($homePageIdentifier, 0, $homePageDelimiterPosition); } $noRouteIdentifier = $this->_scopeConfig->getValue( 'web/default/cms_no_route', ScopeInterface::SCOPE_STORE ); $noRouteDelimiterPosition = strrpos($noRouteIdentifier, '|'); if ($noRouteDelimiterPosition) { $noRouteIdentifier = substr($noRouteIdentifier, 0, $noRouteDelimiterPosition); } if ($this->_scopeConfig->getValue('web/default/show_cms_breadcrumbs', ScopeInterface::SCOPE_STORE) && ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs')) && $page->getIdentifier() !== $homePageIdentifier && $page->getIdentifier() !== $noRouteIdentifier ) { $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()]); } } /** * Prepare HTML content * * @return string */ protected function _toHtml() { $html = $this->_filterProvider->getPageFilter()->filter($this->getPage()->getContent()); return $html; } /** * Return identifiers for produced content * * @return array */ public function getIdentities() { return [\Magento\Cms\Model\Page::CACHE_TAG . '_' . $this->getPage()->getId()]; } }