123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Cms\Block;
- use Magento\Store\Model\ScopeInterface;
- /**
- * Cms page content block
- *
- * @api
- * @since 100.0.2
- */
- class Page extends \Magento\Framework\View\Element\AbstractBlock implements
- \Magento\Framework\DataObject\IdentityInterface
- {
- /**
- * @var \Magento\Cms\Model\Template\FilterProvider
- */
- protected $_filterProvider;
- /**
- * @var \Magento\Cms\Model\Page
- */
- protected $_page;
- /**
- * Store manager
- *
- * @var \Magento\Store\Model\StoreManagerInterface
- */
- protected $_storeManager;
- /**
- * Page factory
- *
- * @var \Magento\Cms\Model\PageFactory
- */
- protected $_pageFactory;
- /**
- * @var \Magento\Framework\View\Page\Config
- */
- protected $pageConfig;
- /**
- * Construct
- *
- * @param \Magento\Framework\View\Element\Context $context
- * @param \Magento\Cms\Model\Page $page
- * @param \Magento\Cms\Model\Template\FilterProvider $filterProvider
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- * @param \Magento\Cms\Model\PageFactory $pageFactory
- * @param \Magento\Framework\View\Page\Config $pageConfig
- * @param array $data
- */
- public function __construct(
- \Magento\Framework\View\Element\Context $context,
- \Magento\Cms\Model\Page $page,
- \Magento\Cms\Model\Template\FilterProvider $filterProvider,
- \Magento\Store\Model\StoreManagerInterface $storeManager,
- \Magento\Cms\Model\PageFactory $pageFactory,
- \Magento\Framework\View\Page\Config $pageConfig,
- array $data = []
- ) {
- parent::__construct($context, $data);
- // used singleton (instead factory) because there exist dependencies on \Magento\Cms\Helper\Page
- $this->_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()];
- }
- }
|