Afficher les sous categories d’une categorie et le nombres produit
février 18, 2010 59 CommentairesCode magento permettant d’afficher les sous catégories et le nombre de produits des sous catégories. Pratique pour aider à la navigation, quand le client arrive dans une catégorie il a accès à toutes les catégories avec le nombre de produits qu’elle contient, ainsi qu’un lien vers la sous catégorie
Placez le code dans list.phtml
Le code est ajouté dans list.phtml de votre thème magento actif.
<?php //obtenir catégorie courante de magento $catcourante = Mage::registry('current_category'); // id $collection = Mage::getModel('catalog/category')->getCategories($catcourante->getEntityId()); foreach($collection as $cat) { if($cat->getIsActive()) { $category = Mage::getModel('catalog/category')->load($cat->getEntityId()); // collection de produits visibles avec un tatut actif $prodCollection = Mage::getResourceModel('catalog/product_collection')->addCategoryFilter($category); Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($prodCollection); Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($prodCollection); ?><!--sortie Html --> <a href="<?php echo $category->getUrl() ?>"><?php echo $category->getName() ?></a> (<?php echo $prodCollection->count() ?>)<br/> <?php } } ?>
Le code et clair et commenté, vous pouvez supprimer le nombre de produits en supprimant
<?php echo $prodCollection->count() ?>
Bonjour,
Je voulais savoir comment récupérer l’id de la catégorie racine. En effet, j’ai besoin de créer un plan de site magento en utilisant la démarche proposée dans « Afficher les sous catégories d’une catégorie et le nombres produit » mais je ne connais pas comment initialiser la bouche de génération de la liste des catégories et des produits.
Il me faut connaitre l’id de la catégorie racine
Bonjour,
pour récuprer une id de catégorie
Les catégories Magento ne s’affichent sur la boutique
Salut ceddddd,
Je voudrai pouvoir afficher ce résultat sur 2 colonnes.
J’ai essayé mais comme je ne comprend pas très bien j’arrive au même résultat dans les deux colonnes.
Je pense ne pas être très claire, long WE…
J’espère que c’est quand même un peu compréhensible.
Angy
Bonjour angy,
Oui c’est clair tu veux séparer les catégories par colonne.
Regarde du côtés de array_chunk() Pour séparer les catégories.
Tu trouvera de la doc sur php info.
Bonsoir,
merci beaucoup pour le code, très pratique et utile pour quelqu’un qui ne connait pas bien php et le modèle Magento.
Il reste à personnaliser l’affichage, mais c’est le plus facile.
Bonsoir,
De rien et bon courage pour la personnalisation de ton code
Salut ced,
Je me trouve sur une fiche produit. Comment je peux savoir dans quelle rubrique racine je me trouve ?
Ceci parce que je veux afficher un menu déployé de toute la catégorie racine dans laquelle je me trouve dans la colonne de gauche.
marvin
Bonjour,
Voici le code pour connaitre la catégorie courante
Merci pour ta réponse mais je me suis mal fait comprendre.
Mage::registry(‘current_category’) me donne la catégorie dans laquelle se trouve la fiche produit.
Imaginons l’arborescence du catalogue comme suite :
- catégorie 1 (racine)=> identifiant ?
—— Sous catégorie 1
—— Sous catégorie 2 =>Mage::registry(‘current_category’)
———– Ma fiche produit
—— Sous catégorie 3
Est-il possible d’avoir l’identifiant de la catégorie 1 racine, une sorte de Mage::registry(‘current_category_root’) ?
Je pense que c’est faisable parce que les rubriques racines sont en surbrillances lorsque l’on est dedans peut importe dans quelle profondeur on se trouve dans les sous catégories. Donc il doit y avoir une variable qui traine pour ces « catégories racines » mais je n’arrive pas à la trouver. ( Ou alors une fonction qui remonte dans l’arbre ?)
J’ai cherché dans le dossier « code/core » pour voir un peut comment été généré les menus racines mais rien. Je précise que je me base sur le modèle « blank » et que je n’ai pas touché à la génération du menu des catégories du catalogue.
Marvin
Je crois avoir trouvé un début de solution. Le breadcrumbs (le fil d’ariane) possède dans son tableau tous les identifiants !!
Il me reste à trouver comment récupérer la variable $crumbs dans le block de la colonne de gauche…
J’ai trouvé une solution qui ne doit pas être très « magento-friendly ». J’ai tous simplement enregistré la variable $crumbs dans le fichier breadcrumbs.phtml dans une variable de session que je récupère dans mon block dans ma colonne de gauche.
Maintenant, peut importe dans quelle sous catégorie je me trouve dans mon catalogue, j’ai ce que je voulais : un menu sur la gauche qui affiche toutes les sous catégories de la catégorie racine.
Désolé…
Salut,
Il existe un code pour récupérer la catégorie mère, des que je remets la main dessus je le poste (je dois avoir ça dans un coin noté (mais où ) je sais pas.
Bonjour,
Je souhaiterais afficher récupérer toutes les catégories (sous categ1, sous categ2, sous categ3) à partir de la catégorie mère.
Connaissez-vous la requête qui me permettrait de récupérer celles-ci ?
Toutes les catégories de magento et toutes les sous catégories ?
Qu’appelle tu catégorie mère ?
Catégorie mère -> Sous catég1 -> Sous categ2 etc etc…
En faite j’ai créé un script qui récupère toutes les catégories mères et qui les affiche dans un menu vertical.
Ton script permet de récupérer les sous catégories en fonction de la catégorie courante. Il m’a donc permis de résoudre un premier point à savoir : lister les souscateg1 en fonction de la categ mère.
Seulement, je voudrais connaitre la requête qui permette de récupérer les enfants (souscateg2) des sous categ1 (directement sans attendre que la page courante soit devenu sous categ1).
Tu pourrais mettre ton code que j’y voie plus clair ou me le mailler (s’il est trop long).
toutes les catégories magento.
Salut ceddd,
Si tu regardes plus haut, j’avais fait une manip pas trés « Magento-friendly » pour récupérer ma catégorie racine. Tu m’avais répondu qu’il y en avait une mais tu sasvais pas où tu l’avais mise. Je l’ai trouvé sous ton tapis :
Mage::app()->getStore()->getRootCategoryId()
(Source : le fichier « List.php » dans « app/code/core/Mage/Catalog/Block/Product/ », fonction « _getProductCollection »)
(ça peut peut-être aider Yohan)
Merci encore de ton aide, je me suis lancé y’a deux semaines dans magento et je ne pensais pas que se serait aussi fastidieux si on veut « customiser » son magasin au delà de ce que nous propose Magento de base !
« Patience et longueur de temps font plus que force ni que rage… pour Magento »
Exactement et je suis d’ailleurs arrivé à mes fins avec persévérance !
Je partage mon script pour ceux qui auraient le même besoin que moi. Ce script consistait à :
1 – Afficher la sous catégorie1 en fonction de la catégorie courante
2 – Afficher la sous catégorie2 au clique et en fonction de la sous catégorie1 choisis par l’utilisateur
[code]
getCategories($catcourante->getEntityId());
?>
getIsActive()):?>
load($_category->getEntityId());?>
<a title="" class="tab">getName();?>
getCategories($_category->entity_id);
$helper = Mage::helper('catalog/category');
?>
<div style="display:none;" id="" class="menu-content">
hasChildren()):?>
<a title="getName(); ?>" href="getCategoryUrl($cat);?>">
getName();?>
[/code]
A bientôt !
Exactement et je suis d’ailleurs arrivé à mes fins avec persévérance !
Ce script consistait à :
1 – Afficher la sous catégorie1 en fonction de la catégorie courante
2 – Afficher la sous catégorie2 au clique et en fonction de la sous catégorie1 choisis par l’utilisateur
NB : J’ai voulu insérer mon script pour le faire partager, mais il semble que cela ne passe pas très bien… Je pense que tu peux supprimer le précédent commentaire qui est incompréhensible… Au besoin, je repasserais par ici pour voir si des personnes ont le même besoin que moi.
A bientôt !
Salut,
@marvin merci pour le code qui trainé sous le tapis:)
@yohan
Il faut l’intégrer avec des balises, je pense que ton code servirait a d’autres, si tu veux maile le moi, je l’insèrerai dans le blog.
Bonjour,
cela m’interesserai énormenent le code poster plus haut en version plus clair..
je parle du code qui permet de lister les catégories en prenant en compte la catégorie mère puis en descendant dans les catégories enfants. Mais sans lister toutes les catégories mères (1er niveau)
Merci
PS : super le site, j’apprend pas mal de chose… ,)
Bonjour David,
Le code m’a gentiment était envoyé par Yohan, je dois en faire un tutoriel ( mais j’avoue manquer de temps).
bonjour cedddd, peut tu me l’envoyer par email dans ce cas ?
Voici le code ici je te laisse le soin de le tester, j’attends ton retour
Code donner par Yohan DUPONT – Adexos.fr
Merci beaucoup cedddd, je testerai ca demain et je te tiens au courant.
Dav
Bonjour,
Merci beaucoup pour le code, cela marche impect, j’ai du modifier pour que ça colle à mes besoin mais c’est OK
@+ et encore merci
Merci à Yohan DUPONT – Adexos.fr
Bonjour Cédric,
J’étais entrain de développer un nouveau menu quand je me suis rappeler qu’une personne voulait faire la même chose ici. Il s’agit de Marvin.
Je souhaite avoir tout comme lui un menu de cette sorte : « peut importe dans quelle sous catégorie je me trouve dans mon catalogue, le menu doit afficher de manière fixe toutes les sous catégories de la catégorie racine. »
En faite, je souhaite que mon menu reste de cette façon, peu importe où je me situe dans l’arborescence. J’ai essayé cette méthode mais sans succès :
$collection = Mage::app()->getStore()->getRootCategoryId()
Pourrais-tu me communiquer l’adresse mail de Marvin pour que je m’entretienne avec lui ? Merci.
Bonjour
Je suis parvenu par une autre méthode à lister les sous-catégorie mais j’aimerais aller plus loin en listant le début de la liste des produits de chaque sous-catégorie comme ça:
[ Subcategory 1 ]
[ Item 1 ] [ Item 2 ] [ Item 3 ]
[ Subcategory 2 ]
[ Item 1 ] [ Item 2 ] [ Item 3 ]
[ Subcategory 3 ]
[ Item 1 ] [ Item 2 ] [ Item 3 ]
J’aimerais pouvoir appeler simplement [code]$cat.getProductListHtml()[/code] mais ça ne marche pas.
Que faire? Merci d’avance
Bon ben finalement, je suis arrivé à mes fins plus rapidement que je ne l’espérais. A bientôt !
Je rectifie en mettant
echo $this->getProductListHtml()
ça m’affiche quelque chose mais il me dit qu’il n’y a pas de produits alors qu’il y en a!What’s wrong?
Comment ajouter les images des sous-catégories à ce code?
Jai ajouté ce code http://samsami2u.wordpress.com/2009/09/15/add-categories-with-images-on-homepage-magento/ pour afficher les catégories en homepage et voudrais que dans les catégories jaie le même résultat avec l’image des sous-catégories. Merci
Bonjour,
Je voudrais savoir comment adapter le code que tu donnes pour afficher le nombre de produit entre parenthèses, de telle sorte qu’on puisse faire afficher le nombre de produit affiché sur la page courante, dans la catégorie courante.
En réalité, quelque soit la catégorie ou le filtre utilisé, le nombre de produit ne change pas et reste celui de la catégorie racine.
Comment faire ?
Merci
Salut,
ton code marche super.
Juste une petite question :
Lorsque l’on se trouve sur la page d’une catégorie mère, les sous rubriques s’affichent (ton tuto) avec la liste des produits.
En fait je cherche en enlever la liste des produits de cette page, puis à les retrouver lorsque l’on est dans la sous catégorie.
Comment procéder ?
Bonjour
Essaye sur les catégories mères d’afficher « bloc statique uniquement » et choisit un bloc statique
qui importe un template qui contient le code. C’est la façon la plus simple ( si elle marche à tester).
Ok merci je vais essayer.
C’est vrai que n’y pensait plus.
D’ailleurs c’est encore mieux car comme ça on ne touche pas aux fichiers sources par ce moyen !
Sauf que pour le code php pur à insérer dans les blocs statiques on peut aller se brosser !
Il faut utiliser la syntaxe magento. Je vais creuser de ce coté merci quand même.
Oui pas de code php dans les blocs statique. A partir du bloc statique il faut importer un template (fichier phtml) qui contient le code.
C’est pas la solution la plus propre, mais c’est la plus simple à mettre en place.
Encore une petite question.
Quelle serait la syntaxe pour afficher l’image attribuée à la sous categorie ?
Merci d’avance.
Bonjour,
Tu as essayé ->getImageUrl()
Oui merci c’est bien ca. Après il suffit d’indiquer le bon chemin (catalog/category) et c’est tout bon. Merci !
Bonjour,
Je suis sous Magento 1.4.1.1
J’ai inséré ce code sur la page catégorie (list.ptml), et j’ai bien des catégories qui s’affichent, mais il s’agit, quelque soit la catégorie ou sous catégorie sur laquelle je suis, de toujours la même liste de catégories affichées : celles qui sont juste en dessous de la catégorie racine.
Illustration
Cat 1
Sous Cat 1-1
Sous Cat 1-2
Cat 2
Sous Cat 2-1
Sous Cat 2-2
…
Et bien sur n’importe quelle page de catégorie (par exemple sur la page « Cat 2″, j’ai toujours affiché la liste Cat 1, Cat2, …
au lieu de Sous Cat 2-1, Sous Cat 2-2
Pourtant dans le code,
$catcourante = Mage::registry(‘current_category’);
me renvoie bien l’ID de la catégorie sur laquelle je suis.
et
$collection = Mage::getModel(‘catalog/category’)->getCategories($catcourante->getEntityId());
renvoie un array avec la liste des catégories parentes au lieu des sous cat.
Une idée ?
Merci de votre réponse,
Solution :
Remplacer :
$collection = Mage::getModel(‘catalog/category’)->getCategories($catcourante->getEntityId());
par :
$collection = $catcourante->getChildrenCategories();
Petite question comment faire pour que il ne m’affiche par exemple que les 4 premières
Bonjour,
Rajoute une condition $i>4 tu stoppe la boucle, ce qui affichera que 4 catégories
slt svp j’ai un problème je veux ficher mes produits dans la page accueil pour faire le procédure d’achat, j’ai ajouté mes produits dans manage product,j’ai modifié ses attribut en cliquant sur main web site store mais les produits ne s’affiche pas dans la page accueil svp m’aider
Bonjour,
Pour la page d’accueil de magento regardez ici
http://bloggento.fr/integration-maquette-magento-page-accueil-/2733
salut Cédric, j’utilise un code du même style que le tiens(le tiens avec plus de chose dedans au niveau de l’affichage), il fonctionne parfaitement sur mon site de dev. Je décide donc de le mettre sur le site de production est la il m’affiche uniquement les catégories qui se trouve sur la home page.
j’ai fait un écho de ma catégories courante et j’ai pourtant la bonne catégorie courante.
as tu déjà rencontré se genre de problème?
merci d’avance
Bonjour,
Non jamais rencontré ce problème. Il faut faire des var dump pour localiser l’erreur.
le soucis vient de cette ligne sur le site de production
$collection = Mage::getModel(‘catalog/category’)->getCategories($catcourante->getEntityId());
en remplaçant $catcourante->getEntityId() par un id de mes catégories, je me retrouve toujours avec le même résultat les 3 catégories se trouvant sur l’accueil.
je viens même de remarquer que si j’ecris la ligne comme ceci :
$collection = Mage::getModel(‘catalog/category’)->getCategories();
cela fonctionne aussi et je me retrouve avec les 3 catégories de l’accueil
tu es sur que tu as bien construit ton arbre des catégories ?
mon arbre est construit de cette façon
1-TT
1-1 sous cat tt 1
1-2 sous cat tt 2
1-3 sous cat tt 3
1-4 sous cat tt 4
2-Route
2-1 sous cat route 1
2-2 sous cat route 2
2-3 sous cat route 3
2-4 sous cat route 4
3-quad
3-1 sous cat quad 1
3-2 sous cat quad 2
3-3 sous cat quad 3
3-4 sous cat quad 4
visuellement sur l’administration quand on regarde les arbres sur le site de dev et de prod, ils sont identique
Bonjour,
je me suis servi de ce script pour répertorier toutes les catégories (sur plusieurs niveaux) de mon site. Mais les catégories sont classées par ID et non par ordre alphabétique ou par classement du BackOffice.
y’a-t-il moyen d’y remédier ?
Bonjour
Merci pour ce code qui me semble indispensable.
Il fonctionne à merveille mais je me suis rendu compte, après moultes tests qu’ils faisait buguer la fonction de recherche : sans ce code, la recherche fonctionne correctement. Avec ce code, les résultats de recherche ne sont simplement pas affiché, comme s’il était invisibles, et le footer ne s’affiche pas non plus.
Auriez-vous une idée pour solutionner ce problème ?
Merci par avance
hello
oui car $catcourante n’existe pas dans la recherche. Pour pallier à ce problème, utilise une condition pour voir si $catcourante existe
if ($catcourante) {
….
}
Tu es merveilleux
Merci pour tout, ca fonctionne évidement à merveille maintenant
Ce code placé dans la home page fonctionne bien sous magento 1.3
MAIS sous magento 1.6.2 au lieu d’afficher les sous catégories ce sont les catégories qui sont affichées.