web-dev-qa-db-fra.com

Magento: Comment savoir si vous êtes sur une page de catégorie ou une page de produit dans la ou les fichiers .phtml

J'essaie de programmer dans mes fichiers .phtml une instruction IF si l'invité est sur une page de liste de catégorie ou sur une page de produit.

Par exemple, ce code:

<?= Mage::app()->getFrontController()->getRequest()->getRouteName(); ?>

Renvoie "Catalogue" chaque fois que je suis sur une page autre qu'une page CMS.

Est-il possible d'utiliser une méthode similaire pour savoir si l'utilisateur envisage une catégorie racine, une catégorie sous-catégorie ou une page de produit individuelle?

Toute aide serait grandement appréciée!

21
Jeff

Cela fait longtemps que j'ai traité des pages de catalogue frontales, mais essayez-la.

Les versions actuelles de Magento enregistrent certaines variables globales (NOT PHP Globals, mais les choses globales du système Magento) sur certaines pages.

Appeler ce qui suit

$category = Mage::registry('current_category');         
$product  = Mage::registry('current_product');
$product  = Mage::registry('product');

retournera soit NULL si les objets n'ont pas été définis (c'est-à-dire que vous êtes sur une page sans catégorie ou un produit), ou renvoyez des objets de catégorie et de produits.

Si un objet produit est renvoyé, vous êtes sur une page de produit.

Si aucun objet produit n'est renvoyé, un objet de catégorie est, vous êtes sur une page de catégorie. Les objets de catégorie ont une méthode pour obtenir l'identifiant parent

$category->getParentId()

Une catégorie sans identifiant parent doit être une catégorie de niveau supérieur, les catégories avec ID parent doivent être sous-catégories.

Cela devrait vous donner ce que vous devez identifier où est la demande actuelle.

Mise à jour: revenir à cette presque une décennie plus tard - je serais probablement non S'appuyer sur le contenu du registre Seul pour déterminer la page, je suis sur. Au lieu de cela, j'utiliserais le plein Nom d'action En combinaison avec la recherche des objets ci-dessus.

42
Alan Storm

Je ne suis pas un grand fan de vérification si le registre actuel_category existe, car fondamentalement, tout contrôleur pourrait le faire et cela ne signifie pas nécessairement que c'est une catégorie. Ma façon de le faire est un peu plus robuste:

$fullActionName = Mage::app()->getFrontController()->getAction()->getFullActionName();
if ($fullActionName == 'catalog_category_view') { 
    ...  //Category
}
elseif ($fullActionName == 'catalog_product_view') {
    ...  //Product
}
5
Mayers

Je crains que vous essayiez de le faire dans le mauvais sens. Je me trompé peut-être parce que vous n'avez pas expliqué qu'est-ce que vous voulez réaliser, mais j'utiliserais la mise en page XML pour inclure votre bloc sur une page de produit avec un paramètre (Dites Produit-page = "1") et similiar Sur une page de catégorie (catégorie-page = "1").

Ensuite, vous seriez capable de dire si vous êtes sur une page de produit ou une page de catégorie en examinant ces paramètres dans votre bloc:

if($this->getProductPage()) {
  //this is a product page, do some stuff
}
elseif($this->getCategoryPage()) {
  //this is a category page, do some stuff
}

La différenciation entre les pages principales et de la sous-catégorie pourrait être plus difficile, la première chose qui me vient à l'esprit est l'analyse des variables de demande, mais ce n'est certainement pas la meilleure approche.

3
silvo