Submitted by amassel00v on
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.
Slaut à tous, j'avance
Permalien Soumis par amassel00v le 29 Janvier, 2008 - 12:03
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 :
<?php
function 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 ?
2 solutions: - surcharger la
Permalien Soumis par tostinni le 29 Janvier, 2008 - 17:53
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.
Merci tostinni. J'ai pas
Permalien Soumis par amassel00v le 29 Janvier, 2008 - 19:59
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.
Pour surcharger
Permalien Soumis par tostinni le 29 Janvier, 2008 - 20:21
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...
C'est ce que j'ai fait, mais
Permalien Soumis par amassel00v le 30 Janvier, 2008 - 08:40
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;
?>
Ok pardon... La fonction
Permalien Soumis par tostinni le 30 Janvier, 2008 - 18:32
Ok pardon...
La fonction correcte (que tu appelles d'ailleurs dans ton my_menu) c'est theme_menu_item