Magento 2: come verificare se ci troviamo in una pagina di categoria o di prodotto?


12

Esiste un modo per verificare se un utente su una pagina di categoria o una pagina di singolo prodotto in Magento 2?

Qualsiasi aiuto sarebbe molto apprezzato!


Intendi dopo un accesso utente casuale dovremmo sapere che l'utente si trova su quale pagina.
Arjun,

Non è richiesto per l'accesso dell'utente. Voglio solo controllare che la pagina sia la categoria o la pagina del prodotto. Come in Magento 1 Possiamo verificarlo in questo modo: $ category = Mage :: register ('current_category');
Magento Team,

Risposte:


29

Puoi provare sotto il codice che potrebbe aiutarti.

Iniettare un'istanza di \Magento\Framework\App\Request\Httpnel costruttore della classe.

Se sei in un controller non è necessario farlo. Puoi già accedervi in ​​questo modo$request = $this->getRequest()

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

Quindi puoi verificare se la categoria o il prodotto è simile a questo:

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
}

3
Se lo vuoi direttamente nel file phtml, usa in questo modo - $ this-> getRequest () -> getFullActionName () qui è la condizione if che ho usato: if ($ this-> getRequest () -> getFullActionName () == ' catalog_category_view ') {...}
KA9

Ciao @Arjun, come otterresti il ​​nome della categoria in cui ti trovi?
Giovanni

5

Immagino che possiamo usare direttamente

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

nel file .phtml per ottenere l'azione della pagina corrente.


risposta perfetta !!! reso il mio giorno :) +1
SagarPPanchal

5

È possibile utilizzare l'istanza di \ Magento \ Framework \ App \ Request \ Http nel costruttore della classe. Se sei in un controller non è necessario farlo.

Puoi già accedervi in ​​questo modo $request = $this->getRequest()

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

Quindi è possibile verificare se è homepage o categorypage o pagina del prodotto in questo modo:

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
}

In caso contrario, utilizzare direttamente nel file phtml utilizzando la gestione degli oggetti

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

Hai provato sopra il codice?
Suresh Chikani,

1

Se si utilizza un file modello, ad esempio .phtml, è possibile chiamare direttamente la pagina utilizzando il codice seguente:

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

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

if ($ request-> getFullActionName () == 'cms_index_index') {// sei sulla homepage}

if ($ request-> getFullActionName () == 'catalog_product_view') {// sei nella pagina del prodotto}

if ($ request-> getFullActionName () == 'catalog_category_view') {// ti trovi nella pagina della categoria}

e se ottieni una categoria corrente e i suoi dati puoi farlo tramite

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

$ Categoria-> getData ( 'schbang_category_name');

dove schbang_category_name è il mio attributo di categoria personalizzato

Spero che questo possa aiutare qualcuno.


-1

puoi aggiungere condizionale, ad esempio

if ($ this-> getProductPage ()) {
  // questa è una pagina del prodotto, fai qualcosa
}
elseif ($ this-> getCategoryPage ()) {
  // questa è una pagina di categoria, fai qualcosa
}

In getCategoryPageMagento 2 non esiste alcuna funzione , almeno non in 2.1.10
Jacques
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.