Voici, j'aimerais construire un menu dynamique php/mysql.
J'y suis presque parvenu, mais ce n'est pas exactement ce que je souhaite.
Voici à quoi ressemble la table 'categories' de ma base de données mysql :
+. catid .+ parentid +.....nom....+...url..+
+-------+---------+-----------+------+
+ ..18 .. + ... 0 ... +...Animaux..+...url..+
+ ..51 .. + ... 0 ... +....Plantes..+...url..+
+ ..25 .. + ... 0 ... +.....Outils...+...url..+
+ ..71 .. + .. 51 .. +.....Roses...+...url..+
+ ..40 .. + ... 0 ... + Brevages...+...url..+
+ ..35 .. + .. 40 .. +.....Jus.......+...url..+
+ ..11 .. + .. 18 .. +...Oiseaux...+...url..+
+ ..95 .. + .. 18 .. +...Chiens....+...url..+
+ ..14 .. + .. 18 .. +....Chats....+...url..+
+ .. 17.. + .. 95... +...Vaccins...+...url..+
+ ..44 .. + .. 35... +....Sucré.....+...url..+
+ ..74 .. + .. 35... +.non-Sucré..+...url..+
+-------+----------+----------+------+
Tous les items de la colonne catid ayant un parentid = à 0 dans la colonne voisine sont les items principaux au premier niveau de mon menu.
Items menu premier niveau
Catid 18 Nom Animaux ............(parentid = 0) // donc premier niveau
Catid 51 Nom Plantes ..............(parentid = 0) // donc premier niveau
Catid 25 Nom Outils ................(parentid = 0) // donc premier niveau
Catid 40 Nom Brevages ............(parentid = 0) // donc premier niveau
Puis tous les autres constituent les sous-items de mon menu ainsi que les sous-sous-items sous-adjacent.
En fait, j’aimerais que mon menu ne soit pas vraiment limité à un nombre précis de niveau. Bien qu’en pratique il y ait peu de chance que plus de trois soit vraiment nécessaire.
Items sous-menu et sous-sous-menu
Catid 18 nom Animaux ..................................// premier niveau
Catid 11 --- Parentid 18 nom Oiseaux ............... // second niveau
Catid 95 --- Parentid 18 nom Chiens ............... // second niveau
Catid 17 --------- Parentid 95 nom Vaccins ........ // troisième niveau (sous menu de Chiens)
Catid 14 --- Parentid 18 nom Chats ................ // second niveau
Catid 51 nom Plantes .................................... // premier niveau
Catid 74 --- Parentid 51 nom Roses ............... // second niveau
Catid 25 nom Outils ........................................ // premier niveau
Catid 40 nom Brevages ................................ // premier niveau
Catid 35 --- Parentid 40 nom Jus ...................... // second niveau
Catid 44 --------- Parentid 35 nom sucré ........ // troisième niveau (sous menu de Jus)
Catid 74 --------- Parentid 35 nom non-sucré ...... // troisième niveau (sous menu de Jus)
Si je tentes de verbaliser ceci:
Vaccins, dont le parentid est 95, est associé à la branche Chiens via le Catid 95 de Chiens.
Puis Chiens, Chats et Oiseaux dont les parentid sont 18 sont donc associés à la branche Catid 18, qui elle en haut lieu appartient à la branche Animaux. Simple!
If catid = 0 // donc items premier niveau menu
If parentid = catid // donc items sous-menu
Et qui devrait éventuellement donner ceci :
Ceci est ma première requête mysql pour le déterminer le premier niveau de mon menu qui fonctionne bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <ul> <li>Animaux <ul> <li>Oiseaux</li> <li>Chiens</li> <ul> <li>Vaccins</li> </ul> <li>Chats</li> </ul> <li>Plantes <ul> <li>Roses</li> </ul> </li> <li>Outils</li> <li>Brevages <ul> <li>Jus <ul> <li>sucré</li> <li>non-sucré</li> </ul> </li> </ul> </li> </ul>
Et ceci est ma deuxième requête pour construire les items du sous-menu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $getcategories = $DB->query("SELECT catid, nom, url FROM categories WHERE parentid = '0');
Mais ca ne fonctionne pas du tout. Et puis je ne sais pas comment construire correctement la boucle qui ira chercher automatiquement tout les items du sous-menus ou du sous-sous-menus ou sous-sous-sous-menus (etc.) s’ils existent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $getsubcategories = $DB->query("SELECT catid, nom, url FROM categories WHERE parentid = catid");
Bien sûr toutes ces données ne sont pas statiques, mais dynamiques. En d'autres mots, à mesure que les tables sont mises à jour, le menu étant dynamique s'adapte. Et ce, que j'élimine, rajoute, modifie, associe, dissocie ou réarrange les items.
Je possède cette partie du script, mais je n'arrive pas à mettre au point cette satanée requête mysql/php.
Je comprend que tous se passe entre les données des colonnes voisines catid et parentid, mais je suis devant l'évidence que je n'ai pas les facultés intellectuelles pour résoudre cette enigme.
Très dévalorisant comme problème je vous assure.
Et puis tant que personne ne m'aura fournie la solution pratique, vous serez pas mieux que moi à mes yeux.
Embêtant n’est-ce pas ?
Partager