JoliBazar Posted November 2, 2023 Share Posted November 2, 2023 (edited) 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 November 2, 2023 by JoliBazar (see edit history) Link to comment Share on other sites More sharing options...
Mediacom87 Posted November 3, 2023 Share Posted November 3, 2023 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 More sharing options...
JoliBazar Posted November 4, 2023 Author Share Posted November 4, 2023 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now