Comment ajouter des commentaires sous des élements de menus ?

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 suis nouveau sur Drupal et je voudrais savoir comment il faut faire pour rajouter proprement des commentaires sous des éléments de menu svp ?

-> chaque 1ère ligne est un lien de menu normal et chaque 2nde ligne est un commenaire associé au menu...

ex :

  • Menu 1
    (description 1)

  • Menu 2
    (description 2)
    ...

La seule façon que j'ai trouvée a été de faire ainsi (voir ci-dessous)... mais je suis sur que le code est loin d'être propre... ;-)

  • La seule contrainte que j'ai est d'avoir la possibilité de lire la description (champ) du menu correspondant (dans l'interface d'admin) afin d'afficher dynamiquement la valeur récupérée.

mais actuellement, la seule "astuce" que j'ai trouvée consiste à récupérer la description directement dans le code HTML pour en extraire le texte contenu dans la balise "title".

Pas très propre, je pense... ;-)

  • D'autre part, actuellement, pour déterminer le node menu correspondant, je teste leur nom, y a t-il une autre façon de faire ça svp ?

Merci de votre aide...

Cédric

function myTheme_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';
}
$css_id = strip_tags($link);

// test the node for which i want to add comment
if (stripos($link, 'MyMenu1') > 0 || stripos($link, 'MyMenu2') > 0) {
$rec = 'title="';
$i = stripos($link, $rec);
if ($i > 0) {
$j = strpos($link, '"', $i+strlen($rec));
if ($j > 0)
$title = substr($link, $i+strlen($rec), $j-$i-strlen($rec));
}
}

$title = ($title != "") ? '

    [' . $title . ']

' : '';
return '

  • '. $link . $menu ."
  • \n" . $title;
    }

    Forum : 
    Version de Drupal : 

    voici un exemple de site (désolé, c'est en allemand :-) ) :
    http://sintmartensonsbeekkwartier.nl/

    Sous chaque menu, on trouve une petite description.
    Je voudrais faire un peu pareil mais je n'ai pas besoin que la description soit un lien hypertexte.
    Par contre, ce que je voudrais c'est que la description soit celle que j'ai renseignée dans le champ 'Description' du menu correspondant dans la console d'admin de Drupal (admin -> site building -> menu -> navigation -> mon menu).
    Ainsi, la description serait affichée dynamiquement sans la stocker en dur dans le code Php.

    Or, le code que j'ai écrit (ci-dessous) fonctionne très bien... mais ça m'oblige à récupérer la Description dans le code HTML...

    • D'autre part, je voudrais que mon code soit paramétrable, de telle sorte que pour certains menus, on afficherait pas cette description. Le code ci-dessous fonctionne aussi mais je n'ai pas trouvé d'autre alternative que de faire des tests en dur dans le Php...

    En gros... je cherche à faire globalement plus propre...

    function myTheme_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';
      }
      $css_id = strip_tags($link);
     
      // test the node for which i want to add comment
      if (stripos($link, 'MyMenu1') > 0 || stripos($link, 'MyMenu2') > 0) {
        $rec = 'title="';
        $i = stripos($link, $rec);
        if ($i > 0) {
           $j = strpos($link, '"', $i+strlen($rec));
           if ($j > 0)
             $title = substr($link, $i+strlen($rec), $j-$i-strlen($rec));
        }
      }

      $title = ($title != "") ? '<div class="views-field-created"><h0>&nbsp;&nbsp;&nbsp;&nbsp;[' . $title . ']</h0></div>' : '';
      return '<li class="'. $class .'">'. $link . $menu ."</li>\n" . $title;
    }

    Cédric

    Plutôt que de te casser les pieds à essayer de modifier un lien, pourquoi ne fais-tu pas une fonction qui affiche ton menu à ta manière, en utilisant le champ description tout simplement ? C'est très simple à réaliser, si tu connais l'identifiant de ton menu (ex. navigation), tu utilises la fonction

    <?php
     $menu
    =menu_tree_all_data('navigation');
    ?>

    , ensuite tu n'as plus qu'à te balader dans l'arborescence. La fonction te renvoie une racine sous la forme d'un tableau de tableaux. Chacun de ces tableau est composé de deux champs :

    <?php
      
    'link'=> l'objet link contenant ta description
       '
    below'=> si ce champ contient un tableau, c'est un tableau de 'link' enfants.
    ?>

    Dans ton cas tu n'as même pas à te préoccuper des éléments en dessous de 'below' mais juste de créer ton markup à partir des objets links du premier niveay.