File: /var/www/vhost/disk-apps/magento.bikenow.co/vendor/magento/module-cms/Block/Page.php
<?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()];
}
}