Bonjour,
Je suis à la recherche d’une solution pour faire une barre horizontale de menu, avec des titres et des sous-titres, comme on en trouve sur l’essentiel des thèmes proposés par RocketTheme, apparemment basés sur SplitMenu, qui doit être une solution «propriétaire».
Pour moi, c’est surtout indispensable parce que je fais un site «relativement» bilingue, où les deux langues doivent apparaître en même temps et donc du coup, je veux pour le menu avoir le titre dans une langue (avec une taille et un type de police précis), et sa traduction en dessous (en plus petit et dans une autre police)…
Si quelqu’un a une piste à me proposer, ça serait super.
Merci d’avance.
Ronan
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Bonjour,
Je me permets de faire remonter mes questions en apportant quelques précisions et l’état actuel des recherches que j’ai pu effectuer pour trouver une solution. J’ai quand même deux gros soucis : je suis pas super doué en anglais et surtout je suis une grosse chèvre en PHP.
J’ai néanmoins identifié deux pistes solides :
1. Détournement du champ «description» des liens de menus, pour qu’ils soient affichés sous le nom des liens, au lieu de l’être au survol des liens par le pointeur de la souris
C’est pas la solution la plus classe, mais elle aurait au moins le mérite de marcher, si j’arrivais à la mettre en place.
C’est ce qui est fait par les thèmes Rockettheme, mais alors que j’ai réussi à en récupérer les fichiers et que je pensais que ça serait une modification assez simple, ce que j’ai trouvé m’a paru extrêmement complexe et comme c’était sur Drupal 6 et imbriqué avec la mise en place de bien d’autres choses, j’ai réalisé que j’étais loin d’être capable d’adapter ça chez moi.
Pour poursuivre sur cette idée de détournement du champ «description», j’ai cherché comment reprendre le «contrôle» de ce champ description, sans vraiment y parvenir. Je n’ai trouvé que cette maigre discussion sur le forum de drupalfr.org qui ne m’a pas vraiment éclairé. Il y est seulement fait référence la fonction theme_menu_item_link, qui n’existe plus sous Drupal 7 et que même sans ça, je n’aurai pas su tellement comment l’overrider…
Aujourd’hui, j’en suis surtout à essayer de comprendre comment agir sur les variables $main_menu et $secondary_menu, dont j’ai toujours du mal à comprendre la construction. Je pense qu’elles ont un rapport avec les deux fontions menu_main_menu et menu_secondary_menu, qui s’appuient, toutes les deux sur la fonction menu_navigation_links, mais dont je ne comprend pas tout à fait comment elle générerait le code d’affichage des liens.
J’ai regardé du côté du thème que j’ai installé (Omega). La barre de menu horizontale est simplement appelée par des print $main_menu et print $secondary_menu, qui me semblent renvoyer à la problématique décrite plus haut. Et j’ai la fonction omega_menu_structure suivante, dans le fichier omega/inc/theme-function.inc qui m’a l’air intéressante à regarder
<?phpfunction omega_menu_structure($menu) {
$items = array();
foreach($menu as $item) {
if(!$item['link']['hidden']) {
$mlid = $item['link']['mlid'];
$attributes = isset($item['link']['localized_options']['attributes']) ? $item['link']['localized_options']['attributes'] : array();
$items['menu-' . $mlid] = array(
'attributes' => $attributes,
'href' => $item['link']['href'],
'title' => $item['link']['title'],
);
if(count($item['below']) > 0) {
// nest infinitely... (crosses fingers)
$subitems = omega_menu_structure($item['below']);
$items['menu-' . $mlid]['below'] = $subitems;
}
}
}
return $items;
}
?>
Je me suis dit que je pourrais ajouter
'description' => $item['link']['description'],dans la partie$items['menu-' . $mlid] = array(...);vu qu’au final, c’est $item qui est renvoyé, mais sans bien savoir où et comment l’utiliser par la suite…D’autant que cette fonction n’est utilisée que dans le fichier omega/preprocess/preprocess-page.inc, pour le rendu des menus de type «Omega», qui ne semble pas franchement très différent du code proposé pour afficher les menus de type «Drupal»…
<?phpif (variable_get('menu_main_links_source', 'main-menu') == variable_get('menu_secondary_links_source', 'user-menu') && $menu_type == 'omega') {
$menu_depth = omega_theme_get_setting('omega_menu_depth') ? omega_theme_get_setting('omega_menu_depth') : 1;
// render the menus as nested ULs to style up some drop downs.
$vars['menu_data'] = $menu = omega_menu_structure(menu_tree_page_data(variable_get('menu_main_links_source', 'main-menu'), $menu_depth, FALSE));
$vars['main_menu'] = theme('links', array(
'links' => $menu,
'attributes' => array(
'class' => array('links', 'main-menu'),
),
'heading' => array(
'text' => t('Main menu'),
'level' => 'h2',
'class' => array('element-invisible'),
)
));
$vars['secondary_menu'] = FALSE;
}
?>
On retrouve le même «heading» dans les menus de type Drupal et même si je ne sais pas bien comment, je suppose que c’est ça qui se retrouve transformé en
<h2 class = "element-invisible">Menu Principal</h2>dans l’affichage des liens de menus.
Il me reste donc à identifier comment s’affiche le
<li class ="menu-xxx first last active><a class="active" title="Description de mon lien que je pourrais utiliser en sous-titre" href="url de mon lien">Nom de mon lien</a>
</li>
et comment faire en sorte d’avoir
<a class="active" href="url de mon lien"><span>Nom de mon lien
<em>Description utilisée en sous-titre</em>
</span></a>
voire même avec un peu plus de spécifications pour changer de police entre les deux
2. Ajout d’un champ supplémentaire «sous-titre» aux menus
Là, c’est clairement plus compliqué, car si je m’étais imaginé au départ qu’avec Drupal, on pouvait ajouter des champs et paramétrer l’affichage simplement et sans rentrer dans du codage PHP en dur, si c’est peut être vrai pour des types de contenu définis sur mesure pour nos besoins (j’espère pouvoir le vérifier bientôt), pour les menus, c’est loin d’être le cas.
Je suis tout de même tombé sur cette discussion du site drupal.org, qui m’a laissé penser que j’avais enfin la solution entre les mains, mais je suis là aussi un peu perdu pour savoir quoi faire des bouts de code proposé.
Est-ce ça signifie qu’il faudrait que je crée un module personnalisé ? J’ai bien l’impression que oui, car j’ai cru comprendre qu’un «hook» implique obligatoirement un nouveau module,non ? Malheureusement, cette discussion ne me donne qu’un aperçu partiel de ce qu’il faudrait coder pour disposer d’un module complet. Vu la date de la discussion, je ne suis même pas convaincu que ce soit bien adapté pour Drupal7.
Bref, non seulement j’ai l’impression qu’il y a là presque tout ce qu’il me faut et que ce serait vraiment la solution idéale, mais je ne sais pas comment m’y prendre pour rendre ça fonctionnel.
Si quelqu’un peut prendre un petit moment pour m’aider à sortir de l’obscurité, ça serait vraiment très très sympa.
Ronan
RonanK
10
Bonjour, je me permets de faire remonter se sujet, car j’ai exactement le meme probleme, et la solution n’est pas si limpide que ça !
Je souhaiterai faire un titre et un sous-titre, pour ça j’aimerai rajouter un champs lors de l’ajout de mon lien….
Ou comment faire ?
Merci à vous
www.workphp.fr
Altes
18