theme_menu_tree avec retour différent selon le niveau

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 ?

#

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 !!

  1. J’ai modifié mon module qui génère ma liste avec sous listes (tree) :
    la ligne
    <?php
    menu_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 :

<?php
return $output ? theme('menu_tree', $output) : '';
?>

par

<?php
return $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() :

<?php
function 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 ?

#

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]

#

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.

Syndiquer le contenu