Le listing de catégories sous Magento fonctionne de 2 façons.
- Soit on affiche les sous-catégories d’une catégorie donnée (par son Identifiant)
- 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
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!!!!!
Frédéric Martinez
février 2nd, 2011 à 1 h 46 min
Pourquoi ne pas faire une condition sur votre Cat 2 ?
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 :-)