Magento 2: Comment vérifier si nous sommes sur une page de catégorie ou une page de produit?

12

Existe-t-il un moyen de vérifier que si un utilisateur sur une page de catégorie ou une page de produit individuelle dans Magento 2?

Toute aide serait grandement appréciée!

L'équipe Magento
la source
Vous voulez dire qu'après une connexion utilisateur aléatoire, nous devrions savoir que l'utilisateur se trouve sur quelle page.
Arjun
Il n'est pas nécessaire pour l'utilisateur de se connecter. Je veux juste vérifier que la page est une page de catégorie ou une page de produit. Comme dans Magento 1 Nous pouvons le vérifier comme ceci: $ category = Mage :: Registry ('current_category');
équipe Magento du

Réponses:

29

Vous pouvez essayer le code ci-dessous, cela pourrait vous aider.

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 s'il s'agit d'une catégorie ou d'un produit comme celui-ci:

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
la source
3
Si vous le voulez directement dans un fichier phtml, utilisez comme ceci - $ this-> getRequest () -> getFullActionName () voici la condition if que j'ai utilisée: if ($ this-> getRequest () -> getFullActionName () == ' catalog_category_view ') {...}
KA9
Bonjour @Arjun, Comment obtiendriez-vous alors le nom de la catégorie dans laquelle vous vous trouvez?
John
5

Je suppose que nous pouvons utiliser directement

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

dans le fichier .phtml pour obtenir l'action de la page en cours.

Kazim Noorani
la source
réponse parfaite !!! a fait ma journée :) +1
SagarPPanchal
5

Vous pouvez utiliser l'instance de \ Magento \ Framework \ App \ Request \ Http dans 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 s'il s'agit d'une page d'accueil ou d'une page de catégorie ou d'une page de produit comme celle-ci:

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
}

Sinon, utilisez directement dans le fichier phtml en utilisant le gestionnaire d'objets

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('\Magento\Framework\App\Request\Http');
Suresh Chikani
la source
Avez-vous essayé le code ci-dessus?
Suresh Chikani
1

Si vous utilisez un fichier modèle, par exemple .phtml, vous pouvez directement appeler sur la page en utilisant le code ci-dessous:

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

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

if ($ request-> getFullActionName () == 'cms_index_index') {// vous êtes sur la page d'accueil}

if ($ request-> getFullActionName () == 'catalog_product_view') {// vous êtes sur la page du produit}

if ($ request-> getFullActionName () == 'catalog_category_view') {// vous êtes sur la page de catégorie}

et si vous obtenez une catégorie actuelle et ses données, vous pouvez le faire via

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

$ category-> getData ('nom_catégorie_schbang');

où schbang_category_name est mon attribut de catégorie personnalisé

J'espère que cela pourrait aider quelqu'un.

Niraj Pathak
la source
-1

vous pouvez ajouter des conditions, telles que

if ($ this-> getProductPage ()) {
  // c'est une page de produit, faites des trucs
}
elseif ($ this-> getCategoryPage ()) {
  // c'est une page de catégorie, faites des trucs
}
manuelvillagrdo
la source
Il n'y a aucune fonction getCategoryPagenulle part dans Magento 2, du moins pas dans 2.1.10
Jacques