175 lines
4.8 KiB
PHP
Executable File
175 lines
4.8 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Set layout
|
|
*
|
|
* @category Olegnax
|
|
* @package Olegnax_Athlete2
|
|
* @copyright Copyright (c) 2023 Olegnax (http://www.olegnax.com/)
|
|
* @license https://www.olegnax.com/license
|
|
*/
|
|
|
|
namespace Olegnax\Athlete2\Observer;
|
|
|
|
use Magento\Catalog\Model\Category;
|
|
use Magento\Catalog\Model\Product;
|
|
use Magento\Cms\Api\Data\PageInterface;
|
|
use Magento\Cms\Api\PageRepositoryInterface;
|
|
use Magento\Framework\App\RequestInterface;
|
|
use Magento\Framework\Event\Observer;
|
|
use Magento\Framework\Event\ObserverInterface;
|
|
use Magento\Framework\Exception\LocalizedException;
|
|
use Magento\Framework\Registry;
|
|
use Magento\Framework\View\Page\Config;
|
|
use Olegnax\Athlete2\Helper\Helper;
|
|
|
|
class ChangeLayout implements ObserverInterface
|
|
{
|
|
|
|
/**
|
|
* @var Config
|
|
*/
|
|
protected $config;
|
|
/**
|
|
* @var RequestInterface
|
|
*/
|
|
private $_request;
|
|
/**
|
|
* @var Helper
|
|
*/
|
|
private $_helper;
|
|
/**
|
|
* @var Registry
|
|
*/
|
|
private $_registry;
|
|
/**
|
|
* @var PageRepositoryInterface
|
|
*/
|
|
private $_pageRepository;
|
|
|
|
/**
|
|
* ChangeLayout constructor.
|
|
* @param Config $config
|
|
* @param RequestInterface $request
|
|
* @param Registry $registry
|
|
* @param PageRepositoryInterface $pageRepository
|
|
* @param Helper $helper
|
|
*/
|
|
public function __construct(
|
|
Config $config,
|
|
RequestInterface $request,
|
|
Registry $registry,
|
|
PageRepositoryInterface $pageRepository,
|
|
Helper $helper
|
|
) {
|
|
$this->config = $config;
|
|
$this->_request = $request;
|
|
$this->_registry = $registry;
|
|
$this->_pageRepository = $pageRepository;
|
|
$this->_helper = $helper;
|
|
}
|
|
|
|
/**
|
|
* @param Observer $observer
|
|
* @throws LocalizedException
|
|
*/
|
|
public function execute(Observer $observer)
|
|
{
|
|
if (!$this->_helper->getSystemValue(Helper::XML_ENABLED)) {
|
|
return;
|
|
}
|
|
$variable = '';
|
|
$actionName = $this->_request->getFullActionName();
|
|
switch ($actionName) {
|
|
case 'catalog_category_view':
|
|
$category = $this->getCurrentCategory();
|
|
if ($category) {
|
|
$variable = $category->getData('page_layout');
|
|
}
|
|
|
|
if (($category
|
|
&& !$category->getData('custom_use_parent_settings')
|
|
&& empty($variable)
|
|
)
|
|
|| !$category
|
|
) {
|
|
$variable = $this->getModuleConfig('products_listing/catalog_page_layout');
|
|
}
|
|
break;
|
|
case 'cms_page_view':
|
|
$page = $this->getCurrentPage();
|
|
if ($page) {
|
|
$variable = $page->getData('page_layout');
|
|
}
|
|
|
|
if (empty($variable) || 'empty' !== $variable) {
|
|
$variable = $this->getModuleConfig('cms_pages/cms_page_layout');
|
|
}
|
|
break;
|
|
case 'catalogsearch_result_index':
|
|
$variable = $this->getModuleConfig('products_listing/search_results_layout');
|
|
break;
|
|
case 'catalog_product_view':
|
|
$product = $this->getCurrentProduct();
|
|
if ($product) {
|
|
$variable = $product->getData('page_layout');
|
|
}
|
|
|
|
if (empty($variable)) {
|
|
$variable = $this->getModuleConfig('product/product_page_layout');
|
|
}
|
|
break;
|
|
case 'blog_index_index':
|
|
case 'blog_search_index':
|
|
case 'blog_archive_view':
|
|
$variable = $this->getModuleConfig('blog/blog_list_page_layout');
|
|
break;
|
|
}
|
|
|
|
if (!empty($variable)) {
|
|
$this->config->setPageLayout($variable);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return Category
|
|
*/
|
|
protected function getCurrentCategory()
|
|
{
|
|
return $this->_registry->registry('current_category') ?: $this->_registry->registry('category');
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @return mixed
|
|
*/
|
|
protected function getModuleConfig($path = '')
|
|
{
|
|
return $this->_helper->getModuleConfig($path);
|
|
}
|
|
|
|
/**
|
|
* @return PageInterface
|
|
*/
|
|
protected function getCurrentPage()
|
|
{
|
|
try {
|
|
$pageId = $this->_request->getParam('page_id', $this->_request->getParam('id', false));
|
|
if ($pageId) {
|
|
return $this->_pageRepository->getById($pageId);
|
|
}
|
|
} catch (LocalizedException $e) {
|
|
return null;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @return Product
|
|
*/
|
|
public function getCurrentProduct()
|
|
{
|
|
return $this->_registry->registry('current_product') ?: $this->_registry->registry('product');
|
|
}
|
|
}
|