Faire un menu à partir des catégories

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,

J'ai une structure géographique comme cela :
continent, puis pays, puis région, etc ...

J'ai créé les catégories, sous catégories, sous-sous catégories etc ...

Existe-t-il un moyen automatique pour créer un menu listant toutes ces catégories et catégories de niveau inférieur ?
Parce que dans mon cas, la création à la main est plutôt fastidieuse.

Merci de vos conseils.

Version de Drupal : 

La fonction taxonomy_get_tree() me retourne un tableau. Faut que je débrouille ça, mais j'ai vu de la doc sur drupal.org.
Merci de m'avoir mis sur la voie.

Pourquoi tu ne t'inspirerais pas du code de taxonomy_menu, plutôt élégant :

<?php
$vocabulary
= taxonomy_get_vocabulary(5); // on suppose que le vocabulaire contenant ton menu porte l'ID 4
$path = 'taxonomy_menu/'. $vocabulary->vid;
$items[] = array('path' => $path, 'title' => t($vocabulary->name),
 
'callback' => 'taxonomy_menu_page', 'access' => $access,
 
'weight' => $vocabulary->weight);

$tree = taxonomy_get_tree($vocabulary->vid);
$old_depth = -1;
$old_path = $path;

foreach (
$tree as $term) {
  if (
$term->depth <= $old_depth) {
   
$slashes_to_remove = $old_depth - $term->depth + 1;
    for (
$i = 0; $i < $slashes_to_remove; $i++) {
     
$old_path = substr($old_path, 0, strrpos($old_path, '/'));
    }
  }
 
$path = $old_path .'/'. $term->tid;
 
$old_depth = $term->depth;
 
$old_path = $path;
 
$items[] = array('path' => $path, 'title' => t($term->name),
   
'weight' => $term->weight);
}
?>

Je crois que tu n'auras même pas besoin de l'adapter à Drupal 5, et si j'ai bien compris, ça fait exactement ce que tu veux.

Ce code est à mettre dans le hook_menu() d'un module de ton cru.