Bonjour à tous,
je veux modifier l’apparence d’un de mes menus, qui n’est ni un primary links, ni un secondary links. Par défaut, drupal produit le code suivant :
<h2>Menu gauche</h2>
<div class="content">
<ul class="menu">
<li class="leaf"><a href="?q=forum" title="Forums">Forums</a></li>
<li class="leaf"><a href="?q=node/1" title="Actualités">Actualités</a></li>
</ul>
</div>Je voudrais obtenir un autre résultat, car je dispose déjà de mes CSS.
<h2>Menu gauche</h2>
<div class="content">
<ul class="monstyle_menu">
<li><a href="?q=forum" title="Forums">Forums</a></li>
<li><a href="?q=node/1" title="Actualités">Actualités</a></li>
</ul>
</div>Je débute avec les thèmes.
A priori, de ce que je comprends, cette customisation peut s’obtenir en travaillant les fonctions de thème dans le phptemplate.
J’ai fait quelques essais et je ne suis pas satisfait de ce j’obtiens.
Le problème, c’est que j’override tous les menus et pas seulement le menu qui à l’ID=60.
Est-il possible de customiser le rendu d’un seul menu ?
Merci par avance pour votre aide.
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Slaut à tous,
j’avance encore un peu dans mon problème. Je rappelle que je ne méprise pas du tout php.
Après de très nombreuses lectures sur drupal.org, je n’ai pas encore de solution même si le code généré s’approche de plus en plus de ce que je veux.
Je vais vous expliquer ce que j’ai fait.
Dans mon phptemplate :
<?phpfunction my_menu_tree($pid = 1) {
$menu = menu_get_menu();
$output = '';
if (isset(
$menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {foreach ($menu['visible'][$pid]['children'] as $mid) {
$type = isset($menu['visible'][$mid]['type']) ? $menu['visible'][$mid]['type'] : NULL;
$children = isset($menu['visible'][$mid]['children']) ? $menu['visible'][$mid]['children'] : NULL;
$output .= theme('menu_item', $mid, menu_in_active_trail($mid) || ($type & MENU_EXPANDED) ? theme('my_menu_tree', $mid) : '', count($children) == 0);
}
}
return
$output;}
function mytheme_my_menu_tree($pid = 1) {
if ($tree = menu_tree($pid)) {
return "\n<ul class=\"mycss_menu\">\n". $tree ."\n</ul>\n";
}
}
?>
Dans page.tpl.php, j’appelle mon menu à overrider avec :
<?php$menu = theme('my_menu_tree', 60);
print $menu;
?>
J’obtiens désormais en sortie, et uniquement pour le menu désiré, ceci :
<ul class="mycss_menu"><li class="leaf"><a href="?q=forum" title="Forums">Forums</a></li>
<li class="leaf"><a href="?q=node/1" title="Actualités">Actualités</a></li>
</ul>
Le problème est donc le suivant pour que j’arrive à obtenir le résultat escompté : supprimer la classe «leaf» des balises li. Et c’est là que ça se gâte.
Je n’y arrive pas du tout.
Est-ce que quelqu’un a une idée pour me sortir de cette impasse ?
amassel00v
33
2 solutions :
- surcharger la classe CSS li.leaf afin de la rendre neutre ou comme tu le souhaites
- surcharger la fonction theme_admin_block_content qui est a l’origine de cette classe.
tostinni
1268
Merci tostinni.
J’ai pas réussi à surcharger theme_admin_block_content, donc je suis passé par les CSS pour le moment.
Mais je ne renonce pas.
amassel00v
33
Pour surcharger theme_admin_block_content c’est facile, tu crees une fonction genre phptemplate_admin_block_content dans ton theme et tu recopies le code de la fonction originale en enlevant les classes leaf, en theorie ca devrait marcher…
tostinni
1268
C’est ce que j’ai fait, mais ça ne fonctionne pas. Les balises leaf sont toujours présentes.
Est-ce que ça peut s’expliquer par l’appel de mon menu directement dans ma page.tlp.php, ce qui fait qu’il n’appelle plus la fonction theme_admin_block_content ?
Je rappelle le code de mon template.
<?php$menu = theme('my_menu_tree', 60);
print $menu;
?>
amassel00v
33
Ok pardon…
La fonction correcte (que tu appelles d’ailleurs dans ton my_menu) c’est theme_menu_item
tostinni
1268