в каком контексте вы хотите это проверить? контроллер? блок?
Мариус
В версии Magento 1 мы используем функцию Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); я хочу показать данные постранично, такие как домашняя страница, страница категории, страница продукта и страница cms и т. д.
MagikVishal
1
Я знаю это, но чтобы ответить на этот вопрос, я хочу знать, где вы хотите использовать это в magento2. В м2 нет глобального класса мага.
Мариус
Ответы:
20
Вы можете попробовать это: внедрить экземпляр \Magento\Framework\App\Request\Httpвашего конструктора класса. Если вы находитесь в контроллере, вам не нужно это делать. Вы уже можете получить к нему доступ, как это$request = $this->getRequest()
Тогда вы можете проверить, является ли домашняя страница такой:
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}
@marius - как я могу проверить то же самое в файле phtml?
Манашви Бирла
2
написать метод в блоке, который возвращает $this->_request->getFullActionName()объявление, использовать его в файле phtml.
Мариус
Не могли бы вы уточнить? Как это сделать?
Макс
@ Макс, что тебе еще нужно? Я думаю, что ответ ясен? скажи мне, что ты хочешь знать
Мариус
Извините, я перечитал и все ясно. Спасибо.
Макс
7
Внутри phtml файла это работает для меня:
if($this->getRequest()->getFullActionName()=='cms_index_index'){//you are on the homepage}if($this->getRequest()->getFullActionName()=='catalog_product_view'){//you are on the product page}if($this->getRequest()->getFullActionName()=='catalog_category_view'){//you are on the category page}
Это сработало для меня. Почему бы не использовать диспетчер объектов?
TheBlackBenzKid
Это плохая практика, чтобы использовать диспетчер объектов напрямую. Официальный разработчик Magento говорит: «Magento запрещает прямое использование ObjectManager в вашем коде, потому что оно скрывает реальные зависимости класса».
Маквана Кетан
0
Из-за шаблона проектирования Dependency Injection. Вы создаете модуль для запроса ресурса по запросу. Менеджер объектов идет против этой парадигмы. Тем не менее, он отлично работает, но все равно, что использовать Mage снова и снова - медленно.
Ответы:
Вы можете попробовать это: внедрить экземпляр
\Magento\Framework\App\Request\Http
вашего конструктора класса. Если вы находитесь в контроллере, вам не нужно это делать. Вы уже можете получить к нему доступ, как это$request = $this->getRequest()
Тогда вы можете проверить, является ли домашняя страница такой:
источник
$this->_request->getFullActionName()
объявление, использовать его в файле phtml.Внутри phtml файла это работает для меня:
источник
Попробуй это:
источник
Из-за шаблона проектирования Dependency Injection. Вы создаете модуль для запроса ресурса по запросу. Менеджер объектов идет против этой парадигмы. Тем не менее, он отлично работает, но все равно, что использовать Mage снова и снова - медленно.
источник
Попробуйте код ниже:
Использование диспетчера объектов
источник