Wie überprüfe ich IsHomePage in Magento 2? Sind wir auf der Homepage?


9

Ich möchte überprüfen, ob die aktuelle Seite die Startseite, die Kategorieseite, die Produktseite und die CMS-Seite in Magento 2 ist


In welchem ​​Kontext möchten Sie dies überprüfen? Regler? Block?
Marius

Magento 1 Version verwenden wir die Funktion Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); Ich möchte Daten wie Homepage, Kategorieseite, Produktseite & CMS-Seite usw.
seitenweise anzeigen

1
Ich weiß das, aber um dies zu beantworten, möchte ich wissen, wo Sie dies in magento2 verwenden möchten. In m2 gibt es keine globale Magierklasse.
Marius

Antworten:


20

Sie können Folgendes versuchen: Injizieren Sie eine Instanz von \Magento\Framework\App\Request\Httpin Ihren Klassenkonstruktor. Wenn Sie sich in einem Controller befinden, müssen Sie dies nicht tun. Sie können bereits so darauf zugreifen$request = $this->getRequest()

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

Dann können Sie überprüfen, ob die Homepage wie folgt ist:

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 - wie überprüfe ich dasselbe in einer HTML-Datei?
Manashvi Birla

2
Schreiben Sie eine Methode in den Block, der die $this->_request->getFullActionName()Anzeige zurückgibt. Verwenden Sie sie in der HTML-Datei.
Marius

Könnten Sie näher darauf eingehen? Wie macht man das?
Max

@Max welche weitere Ausarbeitung brauchst du? Ich denke die Antwort ist klar? Sag mir, was du wissen willst
Marius

Entschuldigung, ich habe es noch einmal gelesen und es ist klar. Danke.
Max

7

Aus der HTML-Datei heraus funktionierte dies für mich:

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
}

es funktioniert für mich
Sandip

3

Probier diese:

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

2
Verwenden Sie keinen Objektmanager
Marius

Das hat bei mir funktioniert. Warum nicht Object Manager verwenden?
TheBlackBenzKid

Es ist eine schlechte Praxis, den Objektmanager direkt zu verwenden. In Magento Official Dev Doc heißt es: "Magento verbietet die direkte Verwendung des ObjectManager in Ihrem Code, da es die tatsächlichen Abhängigkeiten einer Klasse verbirgt."
Makwana Ketan

0

Aufgrund des Entwurfsmusters Dependency Injection. Sie erstellen ein Modul, um eine Ressource bei Bedarf anzufordern. Der Objektmanager widerspricht diesem Paradigma. Es funktioniert zwar großartig, aber es ist, als würde man Mage immer wieder verwenden - langsam.


whoops soll oben kommentieren, mein b.
Chris Anderson

0

Versuchen Sie den folgenden Code:

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

Verwenden des Objektmanagers

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.