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

3 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 :-)

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 et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mon CV ainsi que mes réalisations professionnelles, personnelles et universitaires.

rss_32 twitter_32 Magento

  • alexandre: Merci, c'est exactement ce dont j'avais besoin ! [...]
  • Frédéric Martinez: De base, non ce n'est pas possible. Cependant, cela doit se jouer dans les configurations JS de cal [...]
  • Peter: le tuto est génial, il est tres utile pour les débutants comme moi. Mais j'ai une petite que [...]
  • Frédéric Martinez: @martin : Non cela ne marche pas avec un Magento 1.6.2.0 par exemple car la table sales_order n'exis [...]
  • martin: Bonjour, ce code marche -t-il toujours sur les nouvelles version de magento ? merci [...]