Lister les catégories (et les sous-catégories) sous Magento

Dans: Magento

23 juin 2009

Le listing de catégories sous Magento fonctionne de 2 façons.

  1. Soit on affiche les sous-catégories d’une catégorie donnée (par son Identifiant)
  2. Soit on affiche les sous-catégories de la catégorie courante (problème quand on se trouve sur la page d’accueil par exemple)

Etape 1 : Affichage des sous-catégories d’une catégorie donnée

Bien souvent, on veut afficher les catégories principales (qui sont alors les sous-catégories de la catégorie RACINE).

On repère d’abord l’ID de la catégorie racine. Normalement, c’est 2. (Vérifiez dans Admin > Catalogue > Gérer les catégories > Cliquez sur la catégorie voulue)

1) Si on veut afficher les sous-catégories de la catégorie racine :

<?php
// Récupération de la catégorie racine
$idCategorie = 2;
$_helper = $this->helper('catalog/output');
// Récupération de la liste des sous catégories de la racine
$sousCategories2 = Mage::getModel('catalog/category')->getCategories( $idCategorie, 1, 'true|position' );
$sousCategories = $sousCategories2->getNodes();
// Pour chaque catégorie
foreach($sousCategories as $row):
$_category = Mage::getModel('catalog/category')->load($row); ?>
<?php if ($_category->getIsActive()):?>
<div class="footer_categorie">
<h4>
<a href="<?php echo Mage::getModel('catalog/category')->load($row)->getUrl(); ?>" title="<?php echo $_helper->categoryAttribute($_category, $this->htmlEscape($_category->getName()), 'name'); ?>"><?php echo $_helper->categoryAttribute($_category, $this->htmlEscape($_category->getName()), 'name'); ?></a>
</h4>
</div>
<?php endif; ?>
<?php endforeach; ?>

Cela donnera :

Cat 1
Cat 2
Cat 3

2) Si on veut afficher les sous-catégories et les sous-sous catégories de la catégorie racine (triées comme dans l’admin), comme par exemple :

Cat 1

  • Sous Cat 1-1
  • Sous Cat 1-2

Cat 2

  • Sous Cat 2-1
  • Sous Cat 2-2

On effectue 2 boucles :

<?php
// Récupération de la catégorie racine
$idCategorie = 2;
$_helper = $this->helper('catalog/output');
// Récupération de la liste des sous catégories de la racine
$sousCategories2 = Mage::getModel('catalog/category')->getCategories( $idCategorie, 1, 'true|position' );
$sousCategories = $sousCategories2->getNodes();
// Pour chaque catégorie
foreach($sousCategories as $row):
$_category = Mage::getModel('catalog/category')->load($row); ?>
<?php if ($_category->getIsActive()):?>
<div class="footer_categorie">
<h4>
<a href="<?php echo Mage::getModel('catalog/category')->load($row)->getUrl(); ?>" title="<?php echo $_helper->categoryAttribute($_category, $this->htmlEscape($_category->getName()), 'name'); ?>"><?php echo $_helper->categoryAttribute($_category, $this->htmlEscape($_category->getName()), 'name'); ?></a>
</h4>
<?php if ($_category->hasChildren()): ?>
<ul>
<?php
// Récupération de la liste des sous-sous catégories
$sousSousCategories2 = Mage::getModel('catalog/category')->getCategories( $_category->getId(), 1, 'true|position' );
$sousSousCategories = $sousSousCategories2->getNodes();
// Pour chaque sous-catégorie
foreach($sousSousCategories as $row_sub):
$_sub_category = Mage::getModel('catalog/category')->load($row_sub);
if ($_sub_category->getIsActive()): ?>
<li>
<a href="<?php echo Mage::getModel('catalog/category')->load($row_sub)->getUrl(); ?>" title="<?php echo $_helper->categoryAttribute($_sub_category, $this->htmlEscape($_sub_category->getName()), 'name'); ?>"><?php echo $_helper->categoryAttribute($_sub_category, $this->htmlEscape($_sub_category->getName()), 'name'); ?></a>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
<?php endif; ?>
<?php endforeach; ?>

Etape 2 : Afficher les sous-catégories de la catégorie courante (avec un compteur du nombre de produit et l’image correspondante)

Pour l’affichage des sous-catégories de la catégorie courante (à insérer dans un view.phtml ou list.phtml qui seront interprétés uniquement dans une page de catégorie), on peut utiliser cette méthode :

/**
* Affiche la liste des sous catégories, ainsi que les sous-sous catégories
*/
// Récupération de la catégorie courante
$current_cat = Mage::registry('current_category');
// Récupération de la liste des sous catégories
$children = $current_cat->getChildrenCategories();
// Pour chaque catégorie
foreach ($children as $sub)
{
// Recharge la sous-catégorie (feinte)
$sub->load($sub->getId());
// Affichage du nom de la catégorie
echo '<h2>'. $sub->getName(). '</h2>';
// Affichage de l'image
echo '<img src="' .$sub->getImageUrl(). '" alt="'. $sub->getName(). '_image" />';
// Récupération de la liste des sous-sous catégories
$sub_children = $sub->getChildrenCategories();
foreach ($sub_children as $sub_sub)
{
echo '<h3><a href="' , $sub_sub->getUrl() , '">' , $sub_sub->getName() , ' (', $sub_sub->getProductCount() ,')</a></h3>';
}
echo '<hr>';
}

5 Commentaires pour Lister les catégories (et les sous-catégories) sous Magento

Avatar

Kate

janvier 20th, 2011 à 21 h 23 min

Bonsoir,

D’après l’exemple

Cat 1

* Sous Cat 1-1

*Sous sous Cat 1.1.1

* Sous Cat 1-2

Cat 2

* Sous Cat 2-1
*Sous sous Cat 2.1.1
*Sous sous Cat 2.1.1

* Sous Cat 2-2

Ma question est la suivante comment faire pour afficher la Cat 2 avec que les sous Catégories visible dans le menu seulement sans perturber l’affichage du Cat 1 avec ces sous catégories et sous sous catégories.

En gros dans la Cat 2 , afficher que les Sous Catégories que dans le menu tout en gardant intact la Cat 1 dans le menu

De l’aide svp!!!!!

Avatar

Frédéric Martinez

février 2nd, 2011 à 1 h 46 min

Pourquoi ne pas faire une condition sur votre Cat 2 ?

Avatar

laurent

février 9th, 2011 à 11 h 43 min

Bonjour comment afficher la liste des catégories associé à un produit dans la vue produit (view.phtml) ?

par exemple ça afficherai juste en dessous des tag la liste des catégories (clicable) dans laquelle est le produit

et merci d’avance pour votre réponse :-)

Avatar

Magento liens | Recherche de Push-e

mars 31st, 2012 à 11 h 10 min

[...] [...]

Avatar

Java2dev

septembre 8th, 2016 à 17 h 21 min

Bonjour, pour l’Etape 1 a quel niveau on met les codes? dans quel folder et c’est un fichier a editè ou on crèe un nouveau?

Formulaire pour Commenter

Si vous en avez besoin, entourez votre code :

PHP : [php]echo $variable[/php]
XML : [xml]<default></default>[/xml]

Je m'appelle Frédéric Martinez.

Je suis Freelance Magento, fondateur de l'agence web e-commerce PH2M et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mes réalisations professionnelles, personnelles et universitaires.

Magento Certified Developer Plus

rss_32 twitter_32 Magento

  • Vincent MARMIESSE: Bonjour, Attention depuis Magento 1.9.2.0, les blocs CMS sont en cache ! Cela ne pose pas de pro [...]
  • Java2dev: Bonjour, pour l'Etape 1 a quel niveau on met les codes? dans quel folder et c'est un fichier a edit [...]
  • manuel: Bonjour Frédéric, j'aimerais savoir comment enlever l'option de ( signature obligatoire ) de mon m [...]
  • Arsene: Bonjour a tous, j'aimerais savoir comment créer un module qui propose des options d'assurance su [...]
  • Frédéric Martinez: @Thomas : Il y aura toujours de la perte sur les personnes ne retournant pas sur la page de success. [...]