Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Page.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Cms\Block;
7 
9 
17  \Magento\Framework\DataObject\IdentityInterface
18 {
22  protected $_filterProvider;
23 
27  protected $_page;
28 
34  protected $_storeManager;
35 
41  protected $_pageFactory;
42 
46  protected $pageConfig;
47 
59  public function __construct(
60  \Magento\Framework\View\Element\Context $context,
61  \Magento\Cms\Model\Page $page,
62  \Magento\Cms\Model\Template\FilterProvider $filterProvider,
63  \Magento\Store\Model\StoreManagerInterface $storeManager,
64  \Magento\Cms\Model\PageFactory $pageFactory,
65  \Magento\Framework\View\Page\Config $pageConfig,
66  array $data = []
67  ) {
68  parent::__construct($context, $data);
69  // used singleton (instead factory) because there exist dependencies on \Magento\Cms\Helper\Page
70  $this->_page = $page;
71  $this->_filterProvider = $filterProvider;
72  $this->_storeManager = $storeManager;
73  $this->_pageFactory = $pageFactory;
74  $this->pageConfig = $pageConfig;
75  }
76 
82  public function getPage()
83  {
84  if (!$this->hasData('page')) {
85  if ($this->getPageId()) {
87  $page = $this->_pageFactory->create();
88  $page->setStoreId($this->_storeManager->getStore()->getId())->load($this->getPageId(), 'identifier');
89  } else {
91  }
92  $this->setData('page', $page);
93  }
94  return $this->getData('page');
95  }
96 
102  protected function _prepareLayout()
103  {
104  $page = $this->getPage();
105  $this->_addBreadcrumbs($page);
106  $this->pageConfig->addBodyClass('cms-' . $page->getIdentifier());
107  $metaTitle = $page->getMetaTitle();
108  $this->pageConfig->getTitle()->set($metaTitle ? $metaTitle : $page->getTitle());
109  $this->pageConfig->setKeywords($page->getMetaKeywords());
110  $this->pageConfig->setDescription($page->getMetaDescription());
111 
112  $pageMainTitle = $this->getLayout()->getBlock('page.main.title');
113  if ($pageMainTitle) {
114  // Setting empty page title if content heading is absent
115  $cmsTitle = $page->getContentHeading() ?: ' ';
116  $pageMainTitle->setPageTitle($this->escapeHtml($cmsTitle));
117  }
118  return parent::_prepareLayout();
119  }
120 
128  protected function _addBreadcrumbs(\Magento\Cms\Model\Page $page)
129  {
130  $homePageIdentifier = $this->_scopeConfig->getValue(
131  'web/default/cms_home_page',
133  );
134  $homePageDelimiterPosition = strrpos($homePageIdentifier, '|');
135  if ($homePageDelimiterPosition) {
136  $homePageIdentifier = substr($homePageIdentifier, 0, $homePageDelimiterPosition);
137  }
138  $noRouteIdentifier = $this->_scopeConfig->getValue(
139  'web/default/cms_no_route',
141  );
142  $noRouteDelimiterPosition = strrpos($noRouteIdentifier, '|');
143  if ($noRouteDelimiterPosition) {
144  $noRouteIdentifier = substr($noRouteIdentifier, 0, $noRouteDelimiterPosition);
145  }
146  if ($this->_scopeConfig->getValue('web/default/show_cms_breadcrumbs', ScopeInterface::SCOPE_STORE)
147  && ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs'))
148  && $page->getIdentifier() !== $homePageIdentifier
149  && $page->getIdentifier() !== $noRouteIdentifier
150  ) {
151  $breadcrumbsBlock->addCrumb(
152  'home',
153  [
154  'label' => __('Home'),
155  'title' => __('Go to Home Page'),
156  'link' => $this->_storeManager->getStore()->getBaseUrl()
157  ]
158  );
159  $breadcrumbsBlock->addCrumb('cms_page', ['label' => $page->getTitle(), 'title' => $page->getTitle()]);
160  }
161  }
162 
168  protected function _toHtml()
169  {
170  $html = $this->_filterProvider->getPageFilter()->filter($this->getPage()->getContent());
171  return $html;
172  }
173 
179  public function getIdentities()
180  {
181  return [\Magento\Cms\Model\Page::CACHE_TAG . '_' . $this->getPage()->getId()];
182  }
183 }
_addBreadcrumbs(\Magento\Cms\Model\Page $page)
Definition: Page.php:128
getData($key='', $index=null)
Definition: DataObject.php:119
$storeManager
__()
Definition: __.php:13
__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=[])
Definition: Page.php:59
$page
Definition: pages.php:8
setData($key, $value=null)
Definition: DataObject.php:72