Déjà tu gères ton menu de façon assez étrange.
Etant donné que tu stocks ton menu dans ta base, tu devrais avoir une table
menu(id_menu, name, title, desc, lien, num, profondeur, pos)
num correspondant au numéro du menu, profondeur à "l'étage" du l'entrée et pos à la position dans ce menu, ou plutôt dans une des entrée.
num allant de 1 à n, profondeur de 0 à n (0 correspondant à la racine) et pos de 0 à n (0 correspondant à un titre et donc une nouvelle branche)
Pour récupérer ce menu il suffirait de
1 2 3
| SELECT title, num, profondeur, pos
FROM menu
ORDER BY num, profondeur, pos; |
qui te retournerait
1 2 3 4 5 6 7 8 9
|
title | num | profondeur | pos
-----------------------------
menu1 | 1 | 0 | 0
smenu11 | 1 | 0 | 1
smenu12 | 1 | 0 | 2
menu2 | 2 | 0 | 0
smenu21 | 2 | 0 | 0
smenu22 | 2 | 1 | 1 |
Ensuite tu boucle sur ce tableau en fonction des positions tu crées ton tableau html, cependant je te conseillerais d'utiliser une lib XML, pour gérer les nœuds enfants ect.
Si tableau est statique ce n'est pas nécessaire de le stocker en base, un tableau multidimensionnel suffit et est plus simple à gérer dans les boucle. Si ton utilisateur ne peut ajouter qu'une seule entrée, ou une simple colonne supplémentaire, c'est la meilleurs solution.
S'il peut créer un menu complet et/ou modifier le menu actuelle, le principe de positionnement est plus clair.
Mon exemple n'est pas parfait, à toi de l'améliorer.
Partager