[RESOLU] Afficher un arbre hiérarchique cliquable

Bonjour,
je souhaite afficher des données sous forme d’un arbre hiérarchique cliquable (je sais pas si ca s’appelle réellement ainsi). Vous savez, le genre de truc avec un plus devant les catégories ayant des fils (comme l’explorateur windows en somme)

Quelqu’un a-t-il déjà fait un truc de la sorte, y a-t-il un bon site explicatif sur le net?

Merci

oui donc, un arbre quoi :slight_smile:

Quelles connaissances as tu de php ? et mySQL ? Ca se fait assez simplement, avec ou sans mySQL vu que tout se joue sur le fichier de sortie (html javascript)

Salut …

Au niveau Mysql il faut que ta table prévoit une structure Parent - Enfant … Ensuite affiche déja ton tableau HTML de manière à sortir les parents, les enfants, les enfants des enfants etc …

Quand tu arrives à obtenir qqch de formaté correctement, tu peux t’attaquer au javascript, et de ce coté la je te conseil d’utiliser des

identifiés par un ID unique et tu joues sur la propriété style.visibility (hidden ou visible) …

Merci, je me doutais bien qu’il devait y avoir du js pour l’interactivité.

En fait la table est déjà toute faite et contient plusieurs millions d’enregistrement, les relations parents-enfants étant dans une autre table.

ben en gros ça se passe comme ça, à suppose que tes parents à la racine n’ont pas de parents :

[cpp]function affiche_menu( $parent_id )
{
$query = ‘SELECT * FROM table WHERE parent_id ‘;
$query .= $parent_id === null ? ’ IS NULL’:’ = ’ . intval( $parent_id );

$q = mysql_query( $query );
while ( $result = mysql_fetch_array( $q ) )
{
printf( "%s
", $result[‘title’] );
if ( $result[‘hasChild’] ) )
{
printf( ‘

’, $result[‘id’] );
affiche_menu( $result[‘id’] );
print ‘
’;
}
}
}
print ‘
’;
affiche_menu( null );
print ‘
’;
[/cpp]

En corrigeant la requête of course

Merci, j’ai réussi à recréer une pseudo structure pour mon arbre, il faut que je m’attaque au javascript maintenant.

Si tu peux poster le javascript, ça m’intéresse (ou si tu peux m’envoyer un PM).

Merci.

Backick > le javascript n’est pas compliqué du tout Zouplà :

Il faut remplacer le contenu du while par celui-ci :
[cpp] if ( $result[‘hasChild’] ) )
{
printf( '%1$s
', $result[‘title’], $result[‘id’] );
printf( ‘

’, $result[‘id’] );
affiche_menu( $result[‘id’] );
print ‘
’;
}
else printf( '%s
', $result[‘title’] );[/cpp]

Et la fonction collapse (à mettre dans un fichier js, of course)
[cpp]function collapse(id)
{
menu = document.getElementById( ‘menu-parent-’+id);
menu.style.display = menu.style.display == ‘none’ ?
‘block’:
‘none’
;

}[/cpp]

Voilà

Merci :wink:

Je ne sais pas pourquoi, je suis javascript-averse… un de ses jours, il faudra que je m’achète un bouquin et que je m’y mettes.

Je suis sûr que tu as raison et que ce n’est pas bien méchant !

Ce n’est pas compliqué pourtant, hein…