Modification dynamique de l'ordre des items d'un menu

Catégories:

Bonjour à tous,

J'ai un site qui a plusieurs menus. Ceci ne me pose pas de problème, par contre dans un menus "secondaires" (présent uniquement sur certaines pages), mon client voudrait que dans un menu de ce type:

<ul>
     <li>Item 1</li>
     <li>Item 2</li>
     <li>Item 3</li>
</ul>

si par exemple je clique sur le troisième item, celui ci passe en première position; ce qui me rendrait donc un menu de ce type:

<ul>
     <li>Item 3</li>
     <li>Item 1</li>
     <li>Item 2</li>
</ul>

Comment faire pour éviter de recréer les différents menus avec les entrées du menu à chaque position ?

Merci par avance de vos réponses.

#

Pourquoi ne fais tu pas ta propre fonction de rendu de menu dans une fonction preprocess_page de ton thème ? Tu as la fonction menu_tree_page_data qui prend en paramètre le nom machine de ton menu et te renvoie une structure. Ensuite une simple fonction récursive te permet de générer ton markup idéal avec repositionnement et tout.

Yoran - arNuméral

#

Bonjour Yoran

Merci de ta réponse et désolé de ne pas avoir pu réagir plus tôt.

Alors pourquoi je n’ai pas pensé à cela, simplement parce que les fonctions liées au menu me sont inconnues !

Cela dit je viens de regarder le rendu de la fonction menu_tree_page_data sur api.drupal.org me semble pas mal du tout.

J’ai réussi à faire le traitement permettant de réorganiser les entrées de mon tableau, mais même lorsque je fait un «return $monNouveauMenu» et bien mon menu ne change pas.
Je pense qu’il doit me manquer une clé pour exploiter le retour de ma fonction preprocess

Pourrais-tu m’en dire un peu plus sur le preprocess_page ?

Merci encore

#

«Pourrais-tu m’en dire un peu plus sur le preprocess_page ?»

Si tu crée une fonction NOMDETONTHEME_preprocess_page(&variables) ou MONMODULE_preprocess_page(&$variables), tu peux avoir accès à toutes les variables qui sont envoyées à ton template. Commes elles sont passées par référence, tu peux tout modifier à ta guise ou créer en envoyer une nouvelle variable en faisant comme ça

$variables[‘ma_nouvelle_variable’] = ‘pouet’ ;

Du coup si tu print $ma_nouvelle_variable dans page.tpl.php, ça affichera bien «pouet».

Le «page» de preprocess_page correspond donc à page.tpl.php, il existe aussi des preprocess_node etc etc..

En fait chaque fonction theme déclarée dans un hook_theme peut avoir un «hook_preprocess_nomduthemedéclaré» pour manipuler les variables avant qu’elles n’arrivent au template.

#

Merci pour cet éclaircissement …

Alors ça y est j’arrive à faire afficher mon menu nouvellement organisé.
Mais l’ancien menu «reste», comment est-ce possible de le supprimer de l’affichage ?
Suis-je obligé de réécrire la classe CSS ? ou existe-t-il une autre façon ?

J’ai essayé en désactivant le bloc, mais au quel cas aucun des 2 menus n’apparaît…

Merci pour tes explications

Syndiquer le contenu