Affichage graphique d'un arbre n-aire à partir d'une BDD

Mimou11 - 20 janv. 2013 à 20:00
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 - 23 janv. 2013 à 09:35
Bonjour,
Je cherche à afficher graphiquement un arbre n-aire de telle façon que le père de chaque noeud soit en dessus et au milieu de ses fils, celà implique que la racine est au milieu de tout les noeuds terminaux et au dessus de tout les fils. Aussi il faut que les noeuds terminaux aient le même espacement horizontale.
Je veux programmer en php5 et html.
J'ai trouvé un cours sympa http://recursivite.developpez.com/?page=page_8#LVII-D-1. Mais je ne vois pas par ou commencer et comment traiter l'affichage graphique.
Toutes vos idées sont les bienvenue et me seront d'une grande utilité.
Merci.

1 réponse

cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
23 janv. 2013 à 09:35
Salut,

Pourquoi tu ne recherche pas un tuto avec du PHP (pour mieux comprendre :)).

Donc pour la logique, tu dois avoir dans ta table minimum trois champs.
Exemple : table_person.u_id, table_user.u_parent, table_user.u_name.
Dans la table, le champ table_user.u_parent par défaut est égal à zéro.

Par la suite, tu crée une fonction :
public static function getUsers($idParent = 0) {}
Il y a un paramètre, c'est l'id qui sera repris dans la boucle.

Tu initialises la fonction avec aucun paramètre dans un autre fichier au choix :
$users = User::getUsers();

Dans la fonction, en première ligne, tu fais un SELECT et dans la clause WHERE, tu vérifies si le paramètre $idParent est égal au champ table_user.u_parent.

Par la suite, sous le résultat tu fais une boucle avec le resultat.
Important, la variable $item est passé en référence.
Tu initialises une nouvelle variable, $children avec en valeur, le résultat retourné de cette même fonction et en paramètre le user id en cours qui sera le parent.
Par la suite, tu vérifies avec un isset($children[0]) si il y a une valeur retourné.
Si oui, tu crées une nouvelle clé dans le tableau avec en valeur le tableau $children.

Sous le foreach, tu retournes la variable $resultat.
Si le isset($children[0]) retourne false, la boucle s'arrête.
Voilà terminer :).

foreach ($resultat as &$item) {
    $children = self::getUsers($item['u_id']);
    if (isset($children[0])) {
        $item['children'] = $children;
    }
}

return (array) $resultat;


stéph
0
Rejoignez-nous