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

MagikVishal
quelle
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
quelle
@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
}
Karpa
quelle
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
}
MagePsycho
quelle
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.

Chris Anderson
quelle
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());

quelle