Lors de l'atterrissage sur une page qui a un élément de menu parent aux autres éléments de menu des pages, je voudrais pouvoir afficher une liste de ces éléments de menu enfant. J'utilise le code suivant.
$trail = menu_get_active_trail();
menu_build_tree('main-menu', array(
'expanded' => array($trail[1]['mlid'])
));
Cependant, le tableau renvoyé ressemble à ceci (avec beaucoup de suppression inutile).
array
'49950 PKY Truck Beauty 312' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '312' (length=3)
'plid' => string '311' (length=3)
'below' =>
array
'49952 Seminars 314' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '314' (length=3)
'plid' => string '311' (length=3)
'50000 HDMA Breakfast 316' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '316' (length=3)
'plid' => string '311' (length=3)
'50000 MATS Concert 315' =>
array
'link' => &
array
'menu_name' => string 'main-menu' (length=9)
'mlid' => string '315' (length=3)
'plid' => string '311' (length=3)
Remarquez comment 314, 315 et 316 sont «inférieurs» à 312? Ce sont des frères et sœurs dans ma structure de menu, et cela semble être vérifié par chacun ayant la même valeur pour plid
(311). Évidemment, je peux résoudre ce problème en passant le tableau via une autre fonction, mais je ne peux pas m'empêcher de penser que je manque juste quelque chose.
$tree = menu_build_tree('main-menu', array( 'expanded' => array($trail[1]['mlid']) ));
drupal_render(menu_tree_output($tree))
Ensuite, en utilisant CSS, je peux styliser les liens pour supprimer leul
rembourrage, les faisant apparaître qu'ils sont tous au même niveau. Pas idéal, mais efficace. EDIT: désolé, je ne peux pas comprendre comment faire fonctionner les sauts de ligne.get_sub_menu_based_on_active_page()
et je suis prêt. J'ai dû cesser d'essayer de comprendre le problème d'imbrication car CSS rend l'utilisateur plus sage.Réponses:
Je voulais juste faire un suivi. Je suis revenu à cette question et j'ai trouvé ce qui suit: /programming/2716787/how-to-get-all-the-menu-items-below-a-certain-parent-in-drupal qui est exactement ce dont j'avais besoin.
Le code, copié à partir du lien mentionné ci-dessus et modifié pour répondre à mes besoins (principalement pour utiliser le chemin actuel pour construire l'arborescence de menus, plutôt que d'utiliser une valeur codée en dur:
la source
current_path()
place de$_GET['q']
.$_GET['q']
renverra l'alias du chemin, oùcurrent_path()
obtiendra le noeud / id.Cela peut facilement être fait en utilisant le module de bloc de menu (il faut environ 5 minutes pour le configurer).
Tout ce que tu dois faire est
admin/structure/block
Réglez «Niveau de départ» sur «2e niveau (secondaire)» et définissez la région où il doit être affiché sous «Spécifiez dans quels thèmes et régions ce bloc est affiché».
Captures d'écran:
Voici à quoi ressemble la page de configuration
page admin / structure / bloc avec les blocs de module de bloc de menu activés
J'ai généré du contenu "Page de base" avec le module Devel, et y ai fourni des liens de menu, et j'ai créé une hiérarchie de menu imbriquée
Ceci est le deuxième menu, avec quelques éléments enfants, vous pouvez déjà voir le "Menu principal - 2ème niveau" dans la barre latérale gauche, mais seuls les éléments enfants de 2ème niveau sont visibles
Approfondissons maintenant:
Je pense que l'utilisation du module de bloc de menu pour cette tâche est l'une des solutions les plus simples et les plus rapides.
la source
Comme indiqué dans les commentaires, j'ai fini par utiliser la fonction API, puis styliser avec CSS:
la source
Cette fonction fonctionne correctement pour obtenir le sous-menu de la page actuelle:
J'espère que cette aide!
la source
@Chris Rockwell et @ Mario Awad
Je suis débutant à Drupal, donc c'est difficile de comprendre pour moi où ajouter cette fonction .. Je m'en excuse. Mais, pouvez-vous s'il vous plaît mentionner que dans quel fichier, devrions-nous ajouter cette fonction?
J'essaie de créer une navigation dans la barre latérale qui n'affichera que les éléments enfants sur chaque page. Comment créer un menu de navigation sur la barre latérale avec différents liens de navigation affichés sur différentes pages?
J'apprécie!
Merci!
la source
Je viens de terminer la publication d'une fonction qui obtient les éléments du menu enfant en fonction du chemin d'accès d'un nœud. Vous pouvez le vérifier ici: http://softkube.com/blog/getting-child-menu-items-drupal-menu-tree
J'inclus le lien vers la preuve future de la réponse au cas où le message serait mis à jour et je copierai / collerai également le code complet à la fin.
Dans votre cas, vous pouvez simplement exécuter quelque chose comme ça dans votre thème pour répertorier tous les éléments du menu enfant. Modifiez la
echo
déclaration et le thème à votre convenance.Et voici le code complet de la fonction. Vérifiez le lien pour d'éventuelles mises à jour futures.
Bonne chance.
la source
$parameters
dansmenu_build_tree
?$parameters
j'utilisais, et croyez-moi, je regardais beaucoup. Tout ce que je voulais, c'était, étant donné un chemin, obtenir tous les éléments du menu enfant à tous les niveaux, et je ne pouvais tout simplement pas trouver un moyen. S'il y en a un, informez-moi, je serai heureux d'apprendre et de mettre à jour ma réponse et mon billet de blog. À votre santé.