Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Modifier l'apparence d'un menu, sans utiliser CSS

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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.

Forum : 
Version de Drupal : 

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 ?

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 ç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;
 
?>