Comment vérifier IsHomePage dans Magento 2? Sommes-nous sur la page d'accueil?

9

Je veux vérifier que la page actuelle est la page d'accueil, la page de catégorie, la page de produit et la page cms dans magento 2

MagikVishal
la source
dans quel contexte voulez-vous vérifier cela? manette? bloquer?
Marius
Version Magento 1, nous utilisons la fonction Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); Je veux afficher les données page par page comme la page d'accueil, la page de catégorie, la page de produit et la page cms, etc.
MagikVishal
1
Je le sais, mais pour répondre à cela, je veux savoir où voulez-vous l'utiliser dans magento2. Il n'y a pas de classe de mage globale en m2.
Marius

Réponses:

20

Vous pouvez essayer ceci: Injectez une instance de \Magento\Framework\App\Request\Httpdans votre constructeur de classe. Si vous êtes dans un contrôleur, vous n'avez pas besoin de le faire. Vous pouvez déjà y accéder comme ceci$request = $this->getRequest()

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

Ensuite, vous pouvez vérifier si la page d'accueil comme celle-ci est:

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
la source
@marius - comment vérifier la même chose dans un fichier phtml?
Manashvi Birla
2
écrire une méthode dans le bloc qui retourne $this->_request->getFullActionName()et l'utiliser dans le fichier phtml.
Marius
Pourriez-vous élaborer? Comment fait-on cela?
Max
@Max de quelle élaboration supplémentaire avez-vous besoin? Je pense que la réponse est claire? dites-moi ce que vous voulez savoir
Marius
Désolé, je l'ai relu et c'est clair. Je vous remercie.
Max
7

De l'intérieur du fichier phtml, cela a fonctionné pour moi:

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
la source
ça marche pour moi
sandip
3

Essaye celui-là:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('Magento\Framework\App\Action\Context')->getRequest();
if ($request->getFullActionName() == 'cms_index_index') {
    // is homepage
}
MagePsycho
la source
2
n'utilisez pas le gestionnaire d'objets
Marius
Cela a fonctionné pour moi. Pourquoi ne pas utiliser le gestionnaire d'objets?
TheBlackBenzKid
C'est une mauvaise pratique d'utiliser directement le gestionnaire d'objets. Le document officiel de développement de Magento indique que "Magento interdit l'utilisation directe de l'ObjectManager dans votre code car il cache les vraies dépendances d'une classe."
Makwana Ketan
0

En raison du modèle de conception Injection de dépendance. Vous créez un module pour demander une ressource à la demande. Le gestionnaire d'objets va à l'encontre de ce paradigme. Cependant, cela fonctionne très bien mais c'est comme utiliser à nouveau Mage - lent.

Chris Anderson
la source
whoops censé commenter ci-dessus, mon b.
Chris Anderson
0

Essayez le code ci-dessous:

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

Utilisation du gestionnaire d'objets

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());

la source