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

12

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

Любая помощь будет принята с благодарностью!

Magento Team
источник
Вы имеете в виду, что после случайного входа в систему мы должны узнать, на какой странице находится пользователь.
Арджун
Пользователю не требуется входить в систему. Я просто хочу проверить, является ли страница страницей категории или страницей продукта. Как в Magento 1 Мы можем проверить это так: $ category = Mage :: registry ('current_category');
Команда Magento

Ответы:

29

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

Вводит экземпляр из \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
}
Арджун
источник
3
Если вы хотите использовать его непосредственно в файле phtml, используйте следующее: $ this-> getRequest () -> getFullActionName (). Вот условие if, которое я использовал: if ($ this-> getRequest () -> getFullActionName () == ' catalog_category_view ') {...}
KA9
Привет @ Арджун, Как бы ты тогда узнал название категории, в которой ты находишься?
Джон
5

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

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

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

Казим Нурани
источник
идеальный ответ !!! сделал мой день :) +1
SagarPPanchal
5

Вы можете использовать экземпляр \ Magento \ Framework \ App \ Request \ 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');
Суреш Чикани
источник
Вы пробовали код выше?
Суреш Чикани,
1

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

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

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

if ($ request-> getFullActionName () == 'cms_index_index') {// вы находитесь на домашней странице}

if ($ request-> getFullActionName () == 'catalog_product_view') {// вы находитесь на странице продукта}

if ($ request-> getFullActionName () == 'catalog_category_view') {// вы находитесь на странице категории}

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

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

$ Category-> GetData ( 'schbang_category_name');

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

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

Нирадж Патхак
источник
-1

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

if ($ this-> getProductPage ()) {
  // это страница продукта, сделать что-нибудь
}
elseif ($ this-> getCategoryPage ()) {
  // это страница категории, делать что-то
}
manuelvillagrdo
источник
В getCategoryPageMagento 2 нет функции , по крайней мере, в 2.1.10
Жак