Як перевірити IsHomePage в Magento 2? Ми на головній сторінці?


9

Я хочу перевірити, що поточна сторінка - це домашня сторінка, сторінка категорії, сторінка продукту та сторінка cms у програмі magento 2


в якому контексті ви хочете це перевірити? контролер? блок?
Маріус

Версія Magento 1 ми використовуємо функцію Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); я хочу показати дані впоперек, як домашня сторінка, сторінка категорій, сторінка продукту та сторінка cms тощо
MagikVishal

1
Я це знаю, але для того, щоб відповісти на це, я хочу знати, де ви хочете використовувати це в magento2. У м2 немає глобального класу магів.
Маріус

Відповіді:


20

Ви можете спробувати це: Введіть екземпляр \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
}

@marius - як я можу перевірити те саме у файлі phtml?
Манашві Бірла

2
запишіть метод у блок, який повертає $this->_request->getFullActionName()рекламу, використовуйте його у файл phtml.
Маріус

Не могли б ви детальніше? Як це зробити?
Макс

@Max яка ще розробка вам потрібна? Я думаю, що відповідь зрозуміла? скажи мені, що ти хочеш знати
Маріус

Вибачте, я перечитав його та зрозуміло. Дякую.
Макс

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
}

це працює для мене
sandip

3

Спробуйте це:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('Magento\Framework\App\Action\Context')->getRequest();
if ($request->getFullActionName() == 'cms_index_index') {
    // is homepage
}

2
не використовувати менеджер об’єктів
Маріус

Це працювало для мене. Чому б не використовувати Диспетчер об’єктів?
TheBlackBenzKid

Неправильно використовувати диспетчер об'єктів безпосередньо. Magento Official dev doc говорить: "Magento забороняє безпосередньо використовувати ObjectManager у вашому коді, оскільки він приховує реальні залежності класу".
Маквана Кетан

0

Через схему проектування впорскування залежності. Ви створюєте модуль для запиту ресурсу на вимогу. Менеджер об'єктів йде проти цієї парадигми. Однак, він працює чудово, але це як би використовувати Mage знову - повільно.


Ну, коментуючи вище, мій b.
Кріс Андерсон

0

Спробуйте нижче код:

protected $_logo;   

public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Theme\Block\Html\Header\Logo $logo,
    array $data = []
)
{       
    $this->_logo = $logo;
    parent::__construct($context, $data);
}

public function isHomePage()
{   
    return $this->_logo->isHomePage();
}

Використання диспетчера об'єктів

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.