Magento 2: Wie kann ich überprüfen, ob wir uns auf einer Kategorieseite oder Produktseite befinden?

11

Gibt es eine Möglichkeit, dies zu überprüfen, wenn sich ein Benutzer auf einer Kategorieseite oder einer einzelnen Produktseite in Magento 2 befindet?

Jede Hilfe wäre sehr dankbar!

Magento Team
quelle
Sie meinen, nach einer zufälligen Benutzeranmeldung sollten wir wissen, dass sich der Benutzer auf welcher Seite befindet.
Arjun
Der Benutzer muss sich nicht anmelden. Ich möchte nur überprüfen, ob es sich bei der Seite um eine Kategorieseite oder eine Produktseite handelt. Wie in Magento 1 können wir dies folgendermaßen überprüfen: $ category = Mage :: registry ('current_category');
Magento - Team

Antworten:

28

Sie können den folgenden Code ausprobieren, der Ihnen möglicherweise hilft.

Fügen Sie eine Instanz von \Magento\Framework\App\Request\Httpin Ihren Klassenkonstruktor ein.

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 Kategorie oder Produkt wie folgt ist :

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
}
Arjun
quelle
3
Wenn Sie es direkt in einer HTML-Datei haben möchten, verwenden Sie es wie folgt: $ this-> getRequest () -> getFullActionName () Hier ist die if-Bedingung, die ich verwendet habe: if ($ this-> getRequest () -> getFullActionName () == ' catalog_category_view ') {...}
KA9
Hallo @Arjun, wie würden Sie dann den Namen der Kategorie erhalten, in der Sie sich befinden?
John
5

Sie können die Instanz von \ Magento \ Framework \ App \ Request \ Http in Ihrem Klassenkonstruktor verwenden. 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 es sich um eine Homepage, eine Kategorieseite oder eine Produktseite handelt:

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
}

Andernfalls direkt in der HTML-Datei mit dem Objektmanager verwenden

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('\Magento\Framework\App\Request\Http');
Suresh Chikani
quelle
Haben Sie den obigen Code ausprobiert?
Suresh Chikani
4

Ich denke, wir können direkt verwenden

$this->getRequest()->getFullActionName()

in der .phtml-Datei, um die aktuelle Seitenaktion abzurufen.

Kazim Noorani
quelle
perfekte Antwort!!! machte meinen Tag :) +1
SagarPPanchal
0

Wenn Sie eine Vorlagendatei verwenden, z. B. .phtml, können Sie die Seite direkt mit dem folgenden Code aufrufen:

$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance ();

$ request = $ objectManager-> get ('\ Magento \ Framework \ App \ Request \ Http');

if ($ request-> getFullActionName () == 'cms_index_index') {// du bist auf der Homepage}

if ($ request-> getFullActionName () == 'catalog_product_view') {// Sie befinden sich auf der Produktseite}

if ($ request-> getFullActionName () == 'catalog_category_view') {// Sie befinden sich auf der Kategorieseite}

und wenn Sie eine aktuelle Kategorie und ihre Daten erhalten möchten, können Sie dies über tun

$ category = $ objectManager-> get ('Magento \ Framework \ Registry') -> Registrierung ('current_category');

$ category-> getData ('schbang_category_name');

Dabei ist schbang_category_name mein benutzerdefiniertes Kategorieattribut

Ich hoffe das könnte jemandem helfen.

Niraj Pathak
quelle
-1

Sie können Bedingungen hinzufügen, z

if ($ this-> getProductPage ()) {
  // Dies ist eine Produktseite, mach ein paar Sachen
}}
elseif ($ this-> getCategoryPage ()) {
  // Dies ist eine Kategorieseite, mach ein paar Sachen
}}
manuelvillagrdo
quelle
Es gibt keine Funktion getCategoryPagein Magento 2, zumindest nicht in 2.1.10
Jacques