web-dev-qa-db-fra.com

Afficher tous les liens de menu imbriqués dans Drupal 7

Comment afficher tous les liens imbriqués dans <ul><li> format en Drupal 7? Le code par défaut n'affiche que les liens de 1er niveau même s'ils sont organisés dans le menu d'administration Drupal tel qu'imbriqué:

<?php if ($main_menu): ?>
<div id="mainmenu"> <?php print theme( 'links__system_main_menu', array('links' => $main_menu) ); ?> </div>
<?php endif; ?>

Seul le 1er niveau est affiché dans le ff. configuration du menu:

-Fruits
---Apples
---Oranges
---Lemons
-Cars
---Big car
---Small car
---Fucked up car
-Whatever
6
enchance

La variable par défaut $main_menu Dans page.tpl.php Est définie sur menu_main_menu() , qui est une vue contextuelle de l'arborescence du menu principal.

Pour obtenir la sortie souhaitée, vous devez obtenir l'arborescence de menus complète à l'aide de menu_tree_all_data() et menu_tree_output() .

Pour ce faire dans votre thème, créez template.php Si vous ne l'avez pas déjà fait, et ajoutez une nouvelle fonction de prétraitement pour le modèle de page:

function THEMENAME_preprocess_page(&$variables) {
  // Get the entire main menu tree
  $main_menu_tree = menu_tree_all_data('main-menu');

  // Add the rendered output to the $main_menu_expanded variable
  $variables['main_menu_expanded'] = menu_tree_output($main_menu_tree);
}

Ensuite, dans page.tpl.php, Vous pouvez simplement utiliser:

<?php print render($main_menu_expanded); ?> 

pour obtenir une liste non ordonnée étendue et imbriquée du menu principal.

Pour un peu plus de flexibilité, vous voudrez peut-être envisager le module Menu Block , qui vous permettra de créer des blocs de menus étendus avec son Développer tous les enfants de cette option d'arbre ainsi qu'un hôte d'autres options pour segmenter les arbres de menu.

23
user7

Il existe également un module menu_block qui permet de créer une quantité arbitraire de blocs personnalisés montrant les portions nécessaires du menu

0
Dmitry Vyal