Comment afficher des sous-menus des liens primaires dans Drupal ?

Référence en anglais sur drupal.org : http://drupal.org/node/685664
15 Janvier 2010 - 15h52


Étape 1 : puisque nous allons utiliser du code PHP dans un bloc pour afficher un menu, la première chose à faire est d'activer le filtre PHP dans la page Modules ( menu Administrer > Construction du site > Modules, groupe Core - facultatif).

Étape 2 : allez dans Administrer > Construction du site > Blocs > Ajouter un bloc et créez un nouveau bloc. Ajoutez une Description du bloc (j'indique sous-menu). Choisissez PHP Code comme Format d'entrée et collez le code suivant dans la zone réservée au Corps du bloc :

<?php
$menuItems 
menu_tree_page_data('primary-links');

foreach(
$menuItems as $key => $m) {
      
//check current active menu
   
if ($m['link']['in_active_trail'] && $menuItems [$key]['below']) {
       
$menu menu_tree_output($menuItems [$key]['below']);
   } 
}

//print the menu
print $menu;
?>

Assurez-vous d'avoir vos délimiteurs PHP dans votre code. Cliquez sur Enregistrer le bloc.

Étape 3 : placez votre bloc dans la région de votre choix, et c'est tout. La prochaine fois que vous sélectionnerez un élément de menu dans les liens primaires, ses sous-menus s'afficheront dans le bloc.

Vous pouvez utiliser active-trail pour styliser l'élément de menu sélectionné.

Commentaires

et si on n'utilise pas les liens primaires?

Bravo pour vos tutoriels, ils sont simples et clairs.
Je cherche à faire la même chose, mais avec nice-menu en menu principal, est-ce réalisable aussi simplement?

Juste un petit peu plus...

Bonjour,

Est il possible d'afficher (simplement) le menu horizontalement en utilisant cette méthode ?

Merci.

Styliser l'élément du menu sélectionné.

Bonjour,

Merci pour cette article bien utile.
J'essaie maintenant de styliser l'élément menu avec une classe "selected".

foreach($menuItems as $key => $m) {
//check current active menu
if ($m['link']['in_active_trail'] && $menuItems [$key]['below']) {

$m['link']['options']['attributes']['class'] = 'selected';

$menu = menu_tree_output($menuItems [$key]['below']);
}
}

La classe n'est pas affectée. Avez-vous une idée pour régler ce problème ?

Merci

Probleme de fonctionnement

Bonjour,

J'ai suivi a la lettre ce tuto, lorsque je clique sur un de mes liens primaires, rien ne se passe...

j'ai l'impression que le code php n'est pas pris en compte, j'ai bien sélectionné php dans 'format entrée" et coller le code php dans "corps du bloc", avez vous une idée pour résoudre ce souci ?

j'utilise drupal 6 avec le theme ZEN.

Romann

Pour tous ceux sous drupal 7

Pour tous ceux sous drupal 7 voir ce module : http://drupal.org/project/menu_block

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <css>, <php>, <html>, <ccss>, <ccss>, <drupal5>, <drupal6>, <html>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".
  • You may use [view:viewname] tags to display listings of nodes.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet d'éviter le spam :
6 + 1 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.