Afficher les sous-catégories d'une catégorie avec PrestaShop

Intégration, PrestaShop
  • Accueil
  • Blog
  • Afficher les sous-catégories d'une catégorie avec PrestaShop

Un billet rapide et technique pour une astuce d’intégration PrestaShop utile dans certains cas.

Comment afficher une liste de sous-catégories ?

Durant votre intégration PrestaShop, soit vous vous tapez à la main les X liens correspondant aux sous-catégories (je ne suis pas fan), soit vous listez les sous-catégories via une boucle (on préfère).
Voici le bout de code à ajouter dans vos fichiers .tpl :

<ul>
{foreach Category::getChildren(933, $lang_def) as $category}
<li><a href="{$link->getCategoryLink($category.id_category)}">{$category.name}</a></li>
{/foreach}
</ul>

La fonction getChildren va rechercher les sous-catégories de la catégorie ayant l’ID 993 dans notre cas – à modifier selon vos besoins.
La variable $lang_def est à déclarer avant si vous êtes en multilingue, sinon à remplacer par l’ID de la langue utilisée si vous utilisez une seule langue.
Et c’est tout ! A bientôt 🙂
 

26 commentaires sur “Afficher les sous-catégories d'une catégorie avec PrestaShop

  1. Bonjour, vous allez peut-être pouvoir m’aider, je cherche à afficher la catégorie précédente, et la catégorie suivante dans ma catégorie. Comment y arriver?
    Ceci afin d’aider à faire mon maillage interne. sur presta 1.6
    merci pour votre aide

    1. Bonjour Manu,
      C’est un sujet différent aussi je me note pour un prochain tuto PrestaShop 😉
      A bientôt !

  2. Bonjour Arnaud,
    j’ai testé avec ce code:
    {foreach Category::getChildren({$product_category.id_category}, 1) as $category}
    getCategoryLink($category.id_category)}”>{$category.name}
    {/foreach}
    j’ai donc changé l’id par la variable de l’id de la catégorie par défault du produit en cours, pourquoi cela ne fonctionne pas?
    car la variable $product_category.id_category existe bien et fonctionne.
    Merci pour ton aide

    1. Bonjour Manu,
      Voici le code utilisé qui fonctionne, avec pour id de lang 1 :
      [php]
      <!– AFFICHER LES SOUS-CATEGORIES DE LA CATEGORIE DU PRODUIT CONSULTE –>
      <ul>
      {foreach Category::getChildren($product->id_category_default, 1) as $category}
      <li><a href="{$link->getCategoryLink($category.id_category)}">{$category.name}</a></li>
      {/foreach}
      </ul>
      [/php]
      C’est parfaitement fonctionnel sur PrestaShop 1.6 🙂

    2. En utilisant le {debug}, la variable $product->id_category_default est-elle bien présente sur la page produit ?

    3. Je viens de tester sur PrestaShop 1.6.1.15 et ça fonctionne également…
      Avec le {debug}, tu dois avoir pour $product l’information de catégorie par défaut, colles juste la partie liée à $product.

    4. RRR, cela donne une page sans css.
      il faut bien que je mette la boutique en mode debug? dans le fichier config.inc? je ne comprend pas.
      Tu me dit avec le {debug}?
      je me débrouille un peut avec presta pourtant.

    5. J’avais bien vu ce tuto, mais aucune console ne s’ouvre quand le debug} est installé dans mon fichier product.tpl.
      Je suis vraiment nul sur cet histoire!
      je ne comprend pas pourquoi cela ne fonctionne pas

    6. enfin trouvé, un problème avec le cache. Donc la fenetre debug s’ouvre, je vois pleins de variables,
      mais pour product j’ai ceci:
      $product_categories
      $product_category
      je n’ai pas de product.

    7. j’ai bien la variable ->id_category_default = “209” (209 étant la catégorie du produit par default)
      Mais l’affichage ne se fait pas, car certainement qu’il n y a pas de sous catégories dans la catégorie 209.
      Il faudrait peut etre afficher la catégorie parent pour afficher les enfant de cette catégorie, non?
      catégorie par défault de mon produit: 209
      catégorie parent du la catégorie de mon produit par default: 168
      les id des sous catégorie 168:
      167
      186
      209
      210
      je doit donc avoir un affichage des catégorie suivantes dans ma page produit:
      167 186, 209 et 210
      comprend tu?
      désolé pour tous ces message.
      merci pour ton aide

    8. Dans mon test, j’ai placé mon produit dans une catégorie d’un niveau au-dessus sinon en effet ça n’affiche rien 😉

  3. Bonjour Arnaud,
    merci pour l’astuce, mais aussi pour toutes les autres qui rendent notre quotidien bien plus simple 😉
    J’ai une question, je voudrais afficher les sous catégorie de la page en court sur mes fiche produit (pour faire du maillage interne).
    Il faudrait donc afficher les sous catégorie de la catégorie du produit.
    Une solution?
    Merci

    1. Bonjour Manu,
      Merci pour le commentaire,
      Et bien ça peut se faire et il faut utiliser la fonction qui affiche les sous-catégories dans la class Category.php et l’insérer dans la class Product.php puis ajouter la variable dans le controller de la page Produit.
      Evidemment il faut faire un override pour chaque fichier modifié.
      C’est donc la piste dans les grandes lignes, bon courage 🙂

    2. Hum, cela semble complexe.
      j’arrive à afficher la catégorie du produit en cours, mais pas les sous catégorie de la catégorie en cours.
      je continu à chercher.
      merci

    3. Bonjour Manu,
      Quelle est votre version de PrestaShop pour info ?
      Je vais voir pour rédiger un futur billet sur ce sujet, restez connecté 😉

    4. Bonjour, je suis en version 1.6.1.11
      Je reste connecter bien sûr!
      Merci pour votre aide et ces posts bien utile !

  4. Bonjour Arno, vous pouvez utiliser un modificateur smarty notamment iteration pour afficher les 3 premières éléments. Pour le quatrième éléments, c’est un lien qui doit pointer sur une catégorie contenant toutes vos marques.

  5. Bonjour Arnaud,
    J’ai suivi votre démarche, mais je me retrouve face au même problème.
    Lorsque je veux modifier le lien de ma sous catégorie, j’ai un message d’erreur: “Le champ link_rewrite est invalide.”
    Lorsque je suis dans le module du menu, je peux seulement ajouter des liens dans la barre principale du menu et non dans les sous menus.
    Je parle bien des sous menu et non du menu en lui même (peut être me suis je mal exprimé), c’est là que je veux modifier les liens.
    Je suis allé voir dans le fichier footer.tpl, mais je n’ai pratiquement rien dedans (si vous le désirez, je peux vous faire un copier/coller de ce que j’ai dans ce fichier)
    Merci
    Cdt

  6. Bonjour Cyril, la démarche : vous créez une catégorie / vous avez donc une url associée / vous éditez votre menu et vous ajoutez l’url de la catégorie / si c’est dans le pied de page, il faudra sûrement éditer le fichier footer.tpl

  7. Arnaud,
    Je viens de trouver l’id de ma catégorie, je l’ai modifiée dans le code, mais toujours rien ne se passe.
    J’ai toujours l’affichage suivant dans mon footer :
    Catégories (titre)
    Shop
    Au lieu d’avoir :
    Catégories (titre)
    Vêtements
    Chaussures
    Accessoires
    Est ce que le fait que je sois sur Prestashop Cloud à une incidence sur le code ?
    Merci de votre aide.
    Chris

    1. Il faut prendre l’id de la catégorie Shop, 8 par exemple, puis l’id de langue du français, par exemple 1. Ensuite on aurait le code :
      [php]<ul>
      {foreach Category::getChildren(8, 1) as $category}
      <li><a href="{$link->getCategoryLink($category.id_category)}">{$category.name}</a></li>
      {/foreach}
      </ul>[/php]

  8. Bonjour Christophe, utilisez le code fourni et insérez-le hors du module, directement dans le footer.tpl, ce n’est pas lié à un module 🙂

Laisser un avis

Consultez les autres articles