Jak sprawdzić IsHomePage w Magento 2? Czy jesteśmy na stronie głównej?

9

Chcę sprawdzić, czy bieżąca strona to strona główna, strona kategorii, strona produktu i strona cms w Magento 2

MagikVishal
źródło
w jakim kontekście chcesz to sprawdzić? kontroler? blok?
Marius
W wersji Magento 1 korzystamy z funkcji Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); chcę pokazać strony danych, takie jak strona główna, strona kategorii, strona produktu i strona cms itp.
MagikVishal
1
Wiem o tym, ale aby odpowiedzieć na to pytanie, chcę wiedzieć, gdzie chcesz tego użyć w magento2. Nie ma globalnej klasy magów w m2.
Marius

Odpowiedzi:

20

Możesz spróbować: wstrzyknąć wystąpienie do \Magento\Framework\App\Request\Httpkonstruktora klasy. Jeśli jesteś kontrolerem, nie musisz tego robić. Możesz już uzyskać do niego dostęp w ten sposób$request = $this->getRequest()

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

Następnie możesz sprawdzić, czy strona główna jest taka:

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
źródło
@marius - jak to sprawdzić w pliku phtml?
Manashvi Birla,
2
napisz metodę w bloku, która zwraca $this->_request->getFullActionName()reklamę, użyj jej w pliku phtml.
Marius
Czy mógłbyś opracować? Jak to zrobić?
Maks.
@Max, czego jeszcze potrzebujesz? Myślę, że odpowiedź jest jasna? powiedz mi, co chcesz wiedzieć
Marius
Przepraszam, przeczytałem ponownie i jest jasne. Dziękuję Ci.
Max
7

Z wnętrza pliku phtml to działało dla mnie:

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
}
karpa
źródło
to działa dla mnie
sandip
3

Spróbuj tego:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('Magento\Framework\App\Action\Context')->getRequest();
if ($request->getFullActionName() == 'cms_index_index') {
    // is homepage
}
MagePsycho
źródło
2
nie używaj menedżera obiektów
Marius
To zadziałało dla mnie. Dlaczego nie skorzystać z Menedżera obiektów?
TheBlackBenzKid
Złą praktyką jest bezpośrednie korzystanie z Object Managera. Oficjalny dokument deweloperski Magento mówi: „Magento zabrania bezpośredniego użycia ObjectManager w twoim kodzie, ponieważ ukrywa prawdziwe zależności klasy”.
Makwana Ketan
0

Z powodu wzorca projektowego Dependency Injection. Tworzysz moduł, aby żądać zasobu na żądanie. Menedżer obiektów sprzeciwia się temu paradygmatowi. Działa jednak świetnie, ale przypomina to używanie Maga od nowa - powoli.

Chris Anderson
źródło
whoops powinien skomentować powyżej, mój b.
Chris Anderson,
0

Wypróbuj poniższy kod:

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();
}

Korzystanie z Menedżera obiektów

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());

źródło