How to do use a different theme on search result page instead of default?
-
14-04-2021 - |
Solution
You can assign custom theme using Event/Observer for Search result page
Create events.xml at app/code/{VendorName}/{Modulename}/etc/frontend/
and call an observer on layout_load_before
event.
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="layout_load_before">
<observer name="ForcetoChangeTheme"
instance="{VendorName}\{Modulename}\Observer\ChangeTheme" />
</event>
</config>
On the observer ChangeTheme.php
at {VendorName}\{Modulename}\Observer
change the theme programmatically.
<?php
namespace Devamitbera\ChangethemeAtCheckout\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\App\Request\DataPersistorInterface;
use Magento\Framework\App\ObjectManager;
class ChangeTheme implements ObserverInterface
{
/**
* Design package instance
*
* @var \Magento\Framework\View\DesignInterface
*/
private $_design;
/**
* Store manager
*
* @var \Magento\Store\Model\StoreManagerInterface
*/
private $_storeManager;
private $request;
private $logger;
public function __construct(
\Magento\Framework\View\DesignInterface $design,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Framework\App\Request\Http $request,
\Psr\Log\LoggerInterface $logger
) {
$this->_design = $design;
$this->_storeManager = $storeManager;
$this->request = $request;
$this->logger = $logger;
}
/**
*
* @param \Magento\Framework\Event\Observer $observer
* @return void
*/
public function execute(\Magento\Framework\Event\Observer $observer)
{
$controller = $observer->getControllerAction();
//$this->logger->info($this->request->getFullActionName());
if($this->request->getFullActionName() =='catalogsearch_result_index'){
$this->_design->setDesignTheme(1); // 1 is Theme id
}
}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange