image? petites icones? theme?

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 :)

Je me demandais, comment je peux faire pour mettre une image dans un menu, et que ce soit un lien.
Par exemple, le coup classique de la petite maison (pas dans la prairie non -_- )qui redirige vers accueil.
Ou encore, des petites icônes qui identifie mes contenus différents (comme sur un forum par exemple, on voit la petite icône de message lu, de nouveau message, etc...)

Quand je crée un menu, je n'ai droit qu'à du texte, pas d'options d'images, rien...
Donc, j'ai la très nette impression qu'il faut le coder "en dur" quand on fait le thème.
Mais ça m'étonne un peu...

Vrai, faux, quelles sont les possibilités, solutions, pistes?

Forum : 
Version de Drupal : 

Plutôt vrai : de base les listes d'items générés par drupal sont austères et ne permettant pas de customisation poussée via l'admin. Maintenant peut être existe-t-il des modules pour embellir ça mais je n'en connais pas.

Je parle surtout pour drupal 5 ne connaissant pas à fond drupal 6 encore.

La meilleure solution reste sans d'overrider une fonction theme (copier-coller la fonction theme_item_list présente dans "includes/theme.inc") dans le fichier template.php, en ajoutant le html/les attributs qui peuvent te manquer pour personnaliser ton affichage.

Ce manque de personnalisation niveau id des listes m'a fait perdre quelques cheveux pour la mise en place de javascript...

Simon
tu peux utiliser jquery avec des remplacement à la volé.
Si tu souhaites ajouter un icône, tu peux facilement le faire (jquery + un peu de css pour caler) ou carrément remplacer le contenu avec une image ex :

j=0;
$("#block-menu-1 ul li a").each(function(){
if($(this).is(".active")){
$(this).html('<img src="/themes/garland/images/smenu-'+j+'-on.gif" >')              
}else{
$(this).html('<img src="themes/garland/images/smenu-'+j+'-off.gif" >')
}
j++
})

Germain

Je peux "facilement" le faire? :D cool :D
Mais heuum, je débute avec Drupal, et meme si je sais faire joujou avec javascript et php, je sais pas trop ou je peux mettre du code sans devoir le refaire lors d'une mise à jour (si j'ai bien compris on appelle ça un hook).

Merci beaucoup de ta réponse néanmoins!

salut
Il n'est pas obligatoire de passer par un hook (ce qui signifie créer un module). Tu peux copier coller directement une fonction theme modifié dans ton fichier "template.php" qui est présent dans le thème que tu utilises.

Ca n'a rien d'évident si on ne connait pas je le reconnais; mais en tous cas dans drupal 5 je suis obligé de faire cela.
Je te mets un exemple dans 5 min pour que ce soit plus clair, adapté à drupal 6.

Bon bin à vrai dire je suis un peu blasé car sur drupal 6, je n'y arrive pas...
Il faut copier coller cette fonction dans ton template.php de ton thème

<?php
function phptemplate_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
 
$class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
  if (!empty(
$extra_class)) {
   
$class .= ' '. $extra_class;
  }
  if (
$in_active_trail) {
   
$class .= ' active-trail';
  }
  return
'<li class="'. $class .'">'. $link . $menu ."</li>\n";
}
?>

A la fin tu peux voir le html de la balise "li" sur laqelle tu aurais besoin de rajouter un identifiant.
Le probleme c'est que je ne vois pas quelle variable utiliser pour donner un nom unique valide en css avec drupal 6... A part utiliser la variable link filtré à travers une fonction strip_tags puis une expression regulière pour virer les espaces et les accents...

Bref je trouve ça galère là, comme j'ai besoin aussi de faire ça, je veux bien un tuyau !

ATTENTION : cette fonction dans template.php ne marchera pas si tu utilises certains modules permettant de modifier le menu; puisque eux même détournent déjà cette fonction pour opérer leurs changemets sur les menus !

je vois ils génèrent un id auto à partir du lien du texte et une expression régulière. J'avais pensé à ça mais je trouve ça vraiment pourri de chez pourri comme solution pour faire un truc aussi simple. Drupal devrait faire quelque chose à ce sujet; ça ne me parait pas insurmontable de fournir un id par élément de menu; je ne comprends pas pourquoi il faut savoir faire des expressions régulières pour ça !