Come controllare IsHomePage in Magento 2? Siamo sulla homepage?


9

Voglio verificare che la pagina corrente sia la home page, la pagina delle categorie, la pagina del prodotto e la pagina cms in magento 2


in quale contesto vuoi verificarlo? controllore? bloccare?
Marius

Nella versione Magento 1 utilizziamo la funzione Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); voglio mostrare i dati a pagine come homepage, pagina di categoria, pagina di prodotto, pagina di cms ecc.
MagikVishal

1
Lo so, ma per rispondere a questo voglio sapere dove vuoi usarlo in magento2. Non esiste una classe di maghi globale in m2.
Marius

Risposte:


20

Puoi provare questo: iniettare un'istanza \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 homepage è così:

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 - come posso controllare lo stesso in un file phtml?
Manashvi Birla,

2
scrivere un metodo nel blocco che restituisce l' $this->_request->getFullActionName()annuncio usarlo nel file phtml.
Marius

Potresti elaborare? Come si fa a farlo?
Max

@Max di quale altra elaborazione hai bisogno? Penso che la risposta sia chiara? dimmi cosa vuoi sapere
Marius

Mi dispiace, l'ho riletto ed è chiaro. Grazie.
Max

7

Dall'interno del file phtml questo ha funzionato per me:

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
}

funziona per me
sandip,

3

Prova questo:

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

2
non usare il gestore oggetti
Marius

Questo ha funzionato per me. Perché non usare Object Manager?
TheBlackBenzKid,

È una cattiva pratica utilizzare direttamente l'Object Manager. Il doc dev ufficiale di Magento dice "Magento proibisce l'uso diretto dell'ObjectManager nel codice perché nasconde le dipendenze reali di una classe."
Makwana Ketan,

0

A causa del modello di progettazione Iniezione delle dipendenze. Si crea un modulo per richiedere una risorsa su richiesta. Il gestore degli oggetti sta andando contro quel paradigma. Tuttavia, funziona benissimo, ma è come usare nuovamente Mage: lento.


whoops avrebbe dovuto commentare sopra, il mio b.
Chris Anderson,

0

Prova sotto il codice:

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

Utilizzando Object Manager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());
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.