Hiérarchie pour un menus dynamique

Alguez

Habitué
Bonjour à tous,
je souhaiterait reprendre un sujet abandonné, KangOl m'avait déja parler d'une solution, comme je reprend le projet je l'est réétudier, sans succès car il y a beaucoup de choses dont je ne comprend pas la signification.

Les bases, un tableaux MySQL nommés cats qui contient 3 champs (id, nom et idparent), en tenant compte que le niveau 0 de la hiérarchie est idparent=0.

Quelqu'un peut retravaillez avec moi la proposition de KangOl?
bon !
avant toute chose, il te faut une méthode pour obtenir les enfant directs d'une catégorie

[cpp]array getDirectChildrendOf($id) {
faire requete : SELECT * from cats where idparent = $id
renvoyer les élément sous forme de tableau
}[/cpp]

ensuite il te faut une méthode récursive de mise en page

[cpp]string getHierarchy($id) {
$result = '';
$arr = getDirectChildrenOf($id);
pour chaque élément de $arr {
$result += '<li>';
$result += getHierarchy( nième élément de $arr);
$result += '</li>';
}
si $result est non vide
return '<ul>' + $result + '</ul>';
sinon return $result;
}[/cpp]

ensuite suffit d'appeler la méthode getHierarchy avec 0 comme param (en considérant que les cats qui n'ont pas de parents ont 'idparent' à 0)

note que c'est du pseudo code, a retravailler (ajout de control ...)

l'avantage d'avoir une méthode getDirectChildrendOf c'est que tu peux créer une autre méthode que getHierarchy mais qui au lieu de renvoyer ca sous forme de <ul><li>, le renverrais sous une autre forme ...
l'inconvéniant c'est que ca fait plusieurs requetes (et donc que c'est lent)...
pour contrer cela, tu peux faire une seule requetes et stocker toutes tes cats dans un tableau globale que tu lira dans getDirectChildrendOf

edit: tab owned [:kangol:1]
edit 2: fermage de balise
Code:
 :o[/quote]

Merci à tous
 

Alguez

Habitué
en fait je ne comprend pas le fonctionnement de ces quelques lignes. je comprend bien qu'il y a un tableaux et apres le noir.

J'ai éssayé au cas ou de faire fonctionner ces quelques lignes (même sans comprendre, ce qui n'est pas bien du tout à mon goût) voila ce que j'ai mis
[cpp]array getDirectChildrendOf($id) {
$db = "SELECT * FROM cats WHERE idparent='$id' ORDER BY nom ASC";
$req = mysql_query($db) or die('Erreur SQL !<BR>'.$db.'<BR>'.mysql_error());
while($cat = mysql_fetch_assoc($req)) {
echo ''.$cat['nom'].'('.$cat['id'].')';
}
}

string getHierarchy($id) {
$result = '';
$arr = getDirectChildrenOf($id);
pour chaque élément de $arr { //*je ne comprend pas pour chaque élément de $arr?
$result += '<li>';
$result += getHierarchy( nième élément de $arr);
$result += '</li>';
}
if ($result!='') {
return '<ul>' + $result + '</ul>';
}
else {
return $result;
}
}
[/cpp]
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 080
Messages
6 716 716
Membres
1 586 248
Dernier membre
GxBear263
Partager cette page
Haut