Catégories:
Bonjour,
Pour thèmer un menu avec des sous menus, je surcharge theme_menu_tree avec montheme_menu_tree($tree).
Les sous listes passent par la meme fonction, hors je ne voudrais par renvoyer la même chose à chaque fois …
<?php
function montheme_menu_tree($tree)
{
return '<ul class="menu sf-menu">'. $tree .'</ul>';
}
?>J’ai ajouté la classe sf-menu, je voudrai cette classe juste sur la liste racine et pas les ul imbriqués…
Comment puis-je m’y prendre ?
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Bon voilà comment je me suis pris.
ça me parait pas très bon …
La première opération est la plus moche : je modifie un module, alors que je suis en train de faire un thème !!
la ligne
<?phpmenu_tree_output( $data['below'])
?>
est devenu
<?php_bookblock_menu_tree_output( $data['below'], true)
?>
_bookblock_menu_tree_output() est donc une copie de la fonction originale menu_tree_output() avec un argument supplémentaire ayant pour but de générer une sortie html différente (ajout d’une classe sur le premiere ul uniquement)
Dans cette fonction (_bookblock_menu_tree_output() )j’ai remplacé juste la dernière ligne :
<?phpreturn $output ? theme('menu_tree', $output) : '';
?>
par
<?phpreturn $output ? theme('menu_tree', $output, $sf_menu) : '';
?>
donc avec un dernier argument en plus. Cet argument est destiné à la fonction de mon thème qui surcharge theme_menu_tree() :
<?phpfunction montheme_menu_tree($tree, $level = false)
{
return '<ul class="menu '.($level ? 'sf-menu' : '').'">'. $tree .'</ul>';
}
?>
Donc ça fait le job.
Mais je ne suis pas vraiment satisfait car il a fallu que je trifouille la première ligne de code dans mon module ! ça va parceque c’est le mien mais si ça n’est pas le mien, ça n’est pas jouable.
Comment puis-je faire autrement ?
seb7
61
ok, pas grave.
Juste pour préciser, si quelqu’un deterre ce sujet un jour, c’était juste pour jouer avec drupal car il bien plus aisé de jouer avec les css et/ou jquery pour faire ce que je voulais, qu’il n’y ai pas de mal entenu…
[CLOS]
seb7
61
Bonjour,
je cherche à faire la même chose que vous et cela par la fonction theme_menu_tree. Je ne sais pas comment m’y prendre. Par cette fonction, avez vous réussi à modifier l’affichage des différents niveaux ?
Merci.
kumkum
158