Prestashop : limiter l’arborescence du top menu

Le menu horizontal principal de Prestashop reprend l’arborescence complète des catégories de votre boutique, du moins si vous utilisez le module « Menu Haut Horizontal« .

categories-prestashop

Vous pouvez être amené à vouloir limiter cet affichage pour plusieurs raisons : visuellement dérangeant si de nombreuses catégories, cloisonnement des catégories pour un meilleur référencement naturel, etc.

Dans la zone d’administration, catalogue > catégories, vous avez la possibilité de cacher les catégories de votre choix. Seulement si vous décochez la case, la sous-catégorie ne sera plus visible du menu principal mais également de tous les autres blocs, tel que le bloc categories de la colonne de gauche. C’est absolument ce que nous voulons éviter.

cacher-categorie

Prenons l’exemple ou nous souhaitons garder uniquement deux niveaux dans le menu. Pensez que la catégorie accueil est le niveau 1.

niveau-categories

Ouvrez le fichier blocktopmenu.php du dossier prestashop/modules/blocktopmenu/, et cherchez la fonction generateCategoriesMenu(). Adaptez le premier foreach en fonction du niveau maximum que vous souhaitez garder dans le menu.

private function generateCategoriesMenu($categories, $is_children = 0)
{
    $html = '';

    foreach ($categories as $key => $category) {
        if ($category['level_depth'] > 3) return false;
        // code

niveau3

private function generateCategoriesMenu($categories, $is_children = 0)
{
    $html = '';

    foreach ($categories as $key => $category) {
        if ($category['level_depth'] > 4) return false;
        // code

niveau4

En bonus, pour supprimer les flèches avant les liens des sous-catégories, ajoutez les lignes ci-dessous dans le global.css de votre thème :

.sf-menu li li li a:before, .sf-menu li li li li a:before {
    content: '' !important;
}

Il est possible depuis très récemment (1.6.0.11) de faire des surcharges des classes des modules, donc sans modifier les classes d’origine.

Edit Prestashop 1.7.* :

Le nom du dossier à changé mais la méthode reste la même. Rendez-vous dans le fichier modules/ps_mainmenu/ps_mainmenu.php

Repérez la fonction generateCategoriesMenu et ajoutez le code ci-dessous au bon endroit (le code est un peu différent) :

if ($category['level_depth'] > 3) continue;
Prestashop : comment dupliquer un module
Prestashop : déplacer la description des catégories en bas de page

16 Comments on “Prestashop : limiter l’arborescence du top menu”

    1. Bonjour,

      Cela signifie que vous avez commis une erreur tout simplement.
      Je vous conseille d’activer le mode debug de votre site pour apprendre d’où provient le problème.

  1. Hello,

    Voilà un billet très intéressant, je viens de tester ça marche bien.

    Pour l’override ce qui me dérange actuellement, c’est parfois le côté pratique… le fichier PHP dans override… le CSS et le JS dans le thème tout est dispatché (trop)… je trouverai plus simple de pouvoir overrider un dossier complet.

    A bientôt et merci !

  2. Merci beaucoup mais il y a eu du changement dans la 1.6.1.4 et je ne trouve pas pour adapter votre code. Avez vous une solution pour cette version ?

  3. Merci pour ce tuto ! Il est vrai que ce menu n’est pas pratique quand il y a beaucoup de sous-catégories. J’aimerais le modifier pour qu’il les affiche en multi-niveaux, comme le bloc catégories. Est-ce possible ? Ou mettre le bloc catégories à la place, en horizontal ? Je sèche !

  4. Bonjour Jérôme et merci.
    De mon côté, sur un Prestashop 1.6.1, il a fallu que commente les lignes 614 à 637 du fichier. Ta modif’ ne fonctionnait pas toute seule.

  5. Bonjour,
    Merci pour vos articles et astuces,
    j’ai essayé d’intégrer la ligne de code de plusieurs façon différentes dans la fonction generateCategoriesMenu (prestashop 1.7), mais cela ne fonctionne pas de mon côté, pourriez-vous détailler le « bon endroit ».
    Merci d’avance
    Chris

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *