Текущий макет страницы обрабатывает Magento2
В Magento 1 я мог бы получить текущий дескриптор макета страницы следующим образом
$handle = Mage::app()->getFrontController()->getAction()->getFullActionName();
Это будет возвращено, например, для страницы продукта catalog_product_view
или cms_index_index
для домашней страницы.
Как я могу сделать то же самое в Magento 2?
Мне нужно получить дескриптор страницы изнутри наблюдателя. Что я должен ввести в конструктор, чтобы иметь к нему доступ?
2 answers
Я полагаю, что вам нужно будет ввести
\Magento\Framework\App\Request\Http
в constructor
, а затем выполните:
$handle = $this->_request->getFullActionName();
Проверил это в Magento\Catalog\Model\Observer
- addCatalogToTopmenuItems()
как показано ниже, и это сделало свое дело:
public function __construct(
...
\Magento\Framework\App\Request\Http $request
) {
...
$this->_request = $request;
}
public function addCatalogToTopmenuItems(\Magento\Framework\Event\Observer $observer)
{
$handle = $this->_request->getFullActionName();
....
}
Это один из первых случаев, когда я играю с Magento2, возможно, это совершенно неправильный способ сделать это!
Вам нужно просто добавить строку ниже для файла представления шаблона и файла блокировки, чтобы получить текущее имя действия страницы.
Это приятно работать с любым файлом шаблона и файлом блока,
echo $this->getRequest()->getFullActionName();
На выходе будет указано текущее имя страницы действия.
Для страницы продукта, catalog_product_view
, для страницы категории catalog_category_view