Jump to content

Limiter le nombre de niveaux du menu principal sous Prestashop 8 ?


Recommended Posts

Bonjour,

Je cherche à limiter le nombre de niveaux du menu principal sous Prestashop 8.1.2 mais n'y suis pour l'instant pas parvenu.

J'aimerais que ce menu affiche les catégories principales et secondaires, mais pas les tertiaires et agir vraiment au niveau des entrées de menu créées plutôt que de les rendre invisible en CSS.

M'inspirant de ce didacticiel https://www.lije-creative.com/prestashop-limiter-arborescence-menu/
j'ai tenté d'adapter à Prestashop 8, en éditant la fonction generateCategoriesMenu,
laquelle se trouve à la ligne 754 du fichier /modules/ps_mainmenu/psmainmenu.php

J'ai tenté d'ajouter une condition sur $category['level_depth'] pour sortir de la boucle foreach si level_depth dépasse une certaine profondeur, mais cela n'a eu aucun effet.

    protected function generateCategoriesMenu($categories, $is_children = 0)
    {
        $nodes = [];

        foreach ($categories as $key => $category) {
            $node = $this->makeNode([]);
            if ($category['level_depth'] > 1) {
                $cat = new Category($category['id_category']);
                $link = $cat->getLink();

Je vois qu'il y a deux appels de la méthode generateCategoriesMenu, aux lignes 575 et 786 du même fichier.
Il me semble qu'il serait idéalement plus pertinent de poser une condition au niveau de ces appels appels de méthode.

Edited by JoliBazar (see edit history)
Link to comment
Share on other sites

  • JoliBazar changed the title to Limiter le nombre de niveaux du menu principal sous Prestashop 8 ?

Bonjour,

    protected function generateCategoriesMenu($categories, $is_children = 0)
    {
        $nodes = [];

        foreach ($categories as $key => $category) {
            if ($category['level_depth'] > 2) {
                continue;
            }
            $node = $this->makeNode([]);

ou dans le tpl du thème :

{assign var=_counter value=0}
{function name="menu" nodes=[] depth=0 parent=null}
    {if $nodes|count}
      <ul class="top-menu" {if $depth == 0}id="top-menu"{/if} data-depth="{$depth}">
        {foreach from=$nodes item=node}
            {if $depth >= 2}
                {break}
            {/if}
            <li class="{$node.type}{if $node.current} current {/if}" id="{$node.page_identifier}">

 

Link to comment
Share on other sites

Bonjour Mediacom87,

Un grand merci pour votre aide.
La seconde méthode a parfaitement fonctionné.

En revanche, j'avais bien tenté (et j'ai à nouveau essayé) la première méthode qui est sans effet.
Si je modifie le fichier /modules/ps_mainmenu/psmainmenu.php, aucun effet : le menu reste avec tous ses sous-niveaux.
J'imagine qu'une autre script prend le dessus.
Si je crée un copie le fichier comme "/override/modules/ps_mainmenu/psmainmenu.php", le menu ne s'affiche pas ; je n'ai pas copié dans l'override les autre fichiers du dossier.

Je trouve certaines choses assez déroutantes, comme le fait qu'il y ait un dossier "modules" non seulement à la racine, mais également à l'intérieur du thème, et possiblement encore dans le dossier "override" ?
Doit-on utiliser le dossier "override" uniquement si le dossier ne se trouve pas déjà lui-même déjà dans le thème ?
Est-ce que le thème s'assimile à un "override frontend" et le dossier "override" serait uniquement pour des override du backend ?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...