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!


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
}

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.


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');

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.


-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
}

Il n'y a aucune fonction getCategoryPagenulle part dans Magento 2, du moins pas dans 2.1.10
Jacques
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.