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()
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}
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.
Antworten:
Sie können Folgendes versuchen: Injizieren Sie eine Instanz von
\Magento\Framework\App\Request\Http
in 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()
Dann können Sie überprüfen, ob die Homepage wie folgt ist:
quelle
$this->_request->getFullActionName()
Anzeige zurückgibt. Verwenden Sie sie in der HTML-Datei.Aus der HTML-Datei heraus funktionierte dies für mich:
quelle
Probier diese:
quelle
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.
quelle
Versuchen Sie den folgenden Code:
Verwenden des Objektmanagers
quelle