[PHP-mysql] Créer un menu en arborescence

Bonjour à tous,

Voilà je fais appel aux génies du PHP, pou un petit problème…

J’aimerais réaliser un menu avec catégories et sous catégories… modifiables, et supprimables, à partir d’un espace admin.
Possibilité d’en ajouter autant que je veux (de catégorie et sous catégorie)

Donc de quel manière procédé ?

Voilà un exemple de ce que je voudrais faire :

Merci d’avance aux Helpeurs :wink:

Tu stocks tout les nom de catégorie ou sous catégorie dans la meme base de donnée, mais tu donnes un numéro de niveau a chaque entrée.
Ca pourais donnée un truc comme ca :


+------+------------+---------+---------+-------+
|  id  |    Nom     | Niveau  | isTitre | Ordre |
+------+------------+---------+---------+-------+
|  x   | Catégorie1 |    1    |    1    |   1   |
+------+------------+---------+---------+-------+
|  x   | Titre11    |    2    |    0    |   2   |
+------+------------+---------+---------+-------+
|  x   | Titre12    |    2    |    0    |   3   |
+------+------------+---------+---------+-------+
|  x   | Catégorie2 |    1    |    1    |   4   |
+------+------------+---------+---------+-------+
|  x   | Titre21    |    2    |    0    |   5   |
+------+------------+---------+---------+-------+
|  x   | Titre22    |    2    |    0    |   6   |
+------+------------+---------+---------+-------+
|  x   | Titre31    |    1    |    0    |   7   |
+------+------------+---------+---------+-------+

Ce qui donnerais :


- Catégorie -
  - Sous catégorie
  - Sous catégorie

- Catégorie -
  - Sous catégorie
  - Sous catégorie

- SousCatégorieSeule

Le isTitre est la si tu veux donné un format particulier a certaine catégorie. (Les premieres par exemple)

Tu as plus général : faire une gestion classique d’un arbre, par un tableau (la BDD).

(parent, id, title, height, order)

Avec :

parent : identifiant de l’élément parent, ou NULL si aucun. Donc tous les éléments racines ont pour parent NULL (parent IS NULL).

height : hauteur de l’élément dans l’arbre, soit 0 pour la racine, et height(parent)+1 pour les enfants

order : un champ pour trier les éléments d’une même famille (parent identique)

J’aurais divisé en tables plutot moi :


|---------|                                   |-----------|
|Categorie|                                   |Sous-titre |
|---------|                                   |-----------|
|n°       |1,n                             1,1|n°         |
|libelle  |---------------Contient------------|libelle    |
|         |                                   |           |
|---------|                                   |-----------|

ou pour bien gérer l’ordre :


|---------|                                   |-----------|
|Categorie|                                   |Sous-titre |
|---------|                                   |-----------|
|n°       |1,n           |--------|        1,1|n°         |
|libelle  |--------------|Contient|-----------|libelle    |
|         |              |--------|           |           |
|---------|              |ordre   |           |-----------|
                          |--------|

edit : pfiou… c’est pas facile de dessiner un mcd sur un forum :slight_smile:

J’ai pas tout compris…
Mais je vais essayer quelque chose

merci pour vous reponses

L’autre solution c’est l’arbre par intervalle.

elpaulo> mouais. profondeur de l’arbre : 1 :confused:

SN> tout juste !

<traditionnel troll postgresql>
Avec postgres, parent aurait suffi :siffle:

</troll>

benj > c’est sûr que le CONNECT BY c’est pratique dans ces cas là.

et on remercie oracle :jap:

Ouais enfin la hauteur c’est cadeau :slight_smile:

Vu que j’ai vraiment rien compris (vu mon niveau de novisme)

Quelqu’un pourrait-il m’aider en privé ? (MSN)

:??:

Mouais mais si t’as juste besoin de 2 niveaux, je trouve ca plus propre.

Et pourquoi pas simplement une table catégorie (id_categorie, libelle_categorie) et une table sous-categorie (id_sous_cat, libelle_sous_cat, id_parent) ?

Ben c’est ce que j’ai proposé …

Ah oui excuse-moi, je viens de voir :oui:

Parce qu’il demande un système de menu en arborescence :slight_smile: autant faire un truc complet, même si c’est pour le limiter : ça coûte rien dans ce cas de gérer une profondeur > 2

Exact, qui peut le plus peut le moins, et comme on ne sait jamais de quoi demain sera fait, tu n’auras pas à refaire ton dev si tes besoins évoluent.