Je m’adresse à vous parce que je ne sais pas quels mot taper dans un moteur de recherche, et, vous connaissant, vous avez sûrement réponse à ma questions.
J’ai un true genre comme ça en entrée : (vous aurez compris en 6 dixième de secondes qu’il s’agit d’un résultat d’une requete d’une bdd)
EUROPE FRANCE PARIS
EUROPE FRANCE MULHOUSE
EUROPE SUISSE BERNE
ASIA JAPAN TOKIO
ASIA JAPAN …
etc. etc.
et, j’aimerai avoir un truc comme ça :
(la partie de droite hin)
est-ce qu’un outil pour faire ça en html existe ? ou avez vous une piste à me conseiller ?
mais je ne me suis peut être pas bien expliqué, c’est pas exactement ça que je cherche
il me faut 2 trucs :
l’algo pour transformer ma liste en arborescence
que cette arborescence ait des “checkbox-like” comme dans l’exemple au dessus : quans je clique sur ASIA, je veux que toutes l’arbo soit selectionner, quand je clique sur “Japan” que toutes le villes du japon soit selectionnées.
Marf a l’heure d’AJAX et tout le toutim c’est un peu la honte une applet Java et ca marche plus chez grand monde. Pour l’algo tu peux le faire tout seul non? C’est pas complique. Si tu renvoies ta liste triee ca sera meme encore plus facile et rapide. Si t’y arrive vraiment pas je posterais un truc demain.
Meme sans ajax ( oui jsuis un peu rétissant encore ), creer quelques trucs en javascript qui te permettent de montrer / cacher des divs puis ensuite :
traiter tes requetes par continent, puis pays puis ville.
Je pense a :
Pour chaque continent
– Pour chaque pays
---- Pour chaque ville
et donc avoir une liste qui modifierai l’aspect du div en dessous ( concretement : display : block ou none )
[+] Continent 1
-|–[+] Pays 1
-|—|–Ville 1
-|—|–Ville 2
-|—|–Ville n …
-|–[+] Pays 2
-|—|–Ville 1
-|—|–Ville 2
-|—|–Ville n …
[+] Continent 2
-|–[+] Pays 1
-|—|–Ville 1
-|—|–Ville n …
“visuellement” j’ai pas de soucis, c’est juste que je suis une sous merde en algos et que je galère pour faire ce truc qui ne doit pas être trop compliqué pour une personne normalement dotée!
Si tri ta liste comme tu le sens
Tu prend le debut et tant que c’est identique tu rappelles ta fonction avec le second membre de chacun des trucs identiques.
Et tu continue tant qu’il y a des seconds membres.
tu sors ta liste avec continent ASC, pays ASC, ville ASC
Perso en HTML j’vois bien ca avec des puces, combiné a du CSS et JS qui va bien…
Remarque tu peux aussi faire ca avec des div comme le montre fser tres justement.
Enfin c’est comme tu le sens…
Apres, AJAX c’est vrai que ca sert vraiment a rien dans ce cas, encore que si l’arborescence est vraiment lourde, y’a peut-etre moyen de gagner en ressources… Mais si tu te cantonnes a une vingtaine d’éléments, bon bah va pas chercher compliqué : )
Au final, avec des puces, il faut que tu arrives à générer un truc du genre
[code]
Continent 1
Pays 1
Ville 1
Ville 2
Ville 3
Pays 2
Pays 3
Continent 2
Continent 3
[/code]
C’est pas sorcier a faire, algo recursif de base… Les boucles sont tes amis, pas d’la bouffe ~
On va donc essayer de demystifier tout ça par un cas simple, pas optimisé.
considerons une base mysql comme suit : id, continent, pays, ville
on disait aussi que tu utilisait du php
voilà un exemple d’utilisation ( sans le css ) de l’extraction qui devrait bien se faire dans des listes parentes enfantes
[code]<?php
// Ouverture de la base faite avant
$req = mysql_query(‹ SELECT continent FROM table ORDER BY continent ASC ›);
echo ‹
›;
while ( $toto = mysql_fetch_assoc($req))
{
echo ‹
› , $toto[‹ continent ›] , ‹
›;
echo « \n \t » , ‹
›;
$req2 = mysql_query(‹ SELECT pays FROM table WHERE continent = " ›.$toto[‹ continent ›].’" ORDER BY pays ASC’);
// Ici on n'a pas besoin du continent a prioris ...
$req3 = mysql_query('SELECT DISTINCT `ville` FROM `table` WHERE `pays` = "'.$toto['pays'].'" ORDER BY `ville` ASC');
while( $toto3 = mysql_fetch_assoc($req3))
{
echo '<li>' , $toto2['ville'] , '</li>' , "\n";
}
echo '</ul>';
}
echo '</ul>';
}
echo ‹
›;
// On ferme la base
?>[/code]
Je suis pas certain que le code marche ( j’hesite avec les distincts ou pas ) mais ça devrait etre quelque chose comme ça
edit : Suite a la suppression du corps de mon poste pour n’y laisser que du code, je l’ai re rédigé