Magento 2: Как проверить, находимся ли мы на странице категории или странице продукта?


Есть ли способ проверить, есть ли пользователь на странице категории или на отдельной странице продукта в Magento 2?

Мы будем очень признательны за любую помощь!

Author: Klettseb, 2016-09-12

5 answers

Вы можете попробовать ниже код, который может вам помочь.

Вставьте экземпляр \Magento\Framework\App\Request\Http в конструктор класса .

Если вы находитесь в контроллере, вам не нужно этого делать. Вы уже можете получить к нему доступ следующим образом $request = $this->getRequest()

public function __construct(
    ...
    \Magento\Framework\App\Request\Http $request
) {
    ...
    $this->_request = $request;
}

Затем вы можете проверить, является ли категорией или продуктом следующим образом:

if ($this->_request->getFullActionName() == 'catalog_product_view') {
    //you are on the product page
}
if ($this->_request->getFullActionName() == 'catalog_category_view') {
    //you are on the category page
}
 32
Author: Arjun, 2016-09-12 05:34:43

Я думаю, мы можем напрямую использовать

$this->getRequest()->getFullActionName()

В файле .phtml, чтобы получить текущее действие страницы.

 7
Author: Kazim Noorani, 2019-09-20 07:03:30

Вы можете использовать экземпляр \Magento\Framework\Приложение\Запрос\Http в конструкторе класса. Если вы находитесь в контроллере, вам не нужно этого делать.

Вы уже можете получить к нему доступ следующим образом $request = $this->getRequest()

public function __construct(
    ...
    \Magento\Framework\App\Request\Http $request
) {
    ...
    $this->_request = $request;
}

Затем вы можете проверить, является ли домашняя страница или страница категории или страница продукта такой:

if ($this->_request->getFullActionName() == 'cms_index_index') {
    //you are on the homepage
}
if ($this->_request->getFullActionName() == 'catalog_product_view') {
    //you are on the product page
}
if ($this->_request->getFullActionName() == 'catalog_category_view') {
    //you are on the category page
}

В противном случае напрямую используйте в файле phtml с помощью диспетчера объектов

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('\Magento\Framework\App\Request\Http');
 7
Author: Suresh Chikani, 2019-12-02 08:14:39

Если вы используете файл шаблона, т.е. .phtml, то вы можете напрямую позвонить на страницу, используя приведенный ниже код:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$request = $objectManager->get('\Magento\Framework\App\Request\Http');

if ($request->getFullActionName() == 'cms_index_index') {
//you are on the homepage
}

if ($request->getFullActionName() == 'catalog_product_view') {
//you are on the product page
}

if ($request->getFullActionName() == 'catalog_category_view') {
//you are on the category page
}

И если вы хотите получить текущую категорию и ее данные, вы можете сделать это через

$category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');

$category->getData('schbang_category_name');

Где schbang_category_name - мой пользовательский атрибут категории

Я надеюсь, что это может кому-то помочь.

 2
Author: Niraj Pathak, 2020-11-20 03:40:54

Вы можете добавить условные, такие как

if($this->getProductPage()) {
  //this is a product page, do some stuff
}
elseif($this->getCategoryPage()) {
  //this is a category page, do some stuff
}
 -1
Author: manuelvillagrdo, 2016-09-12 05:37:33