Page 1 sur 1
Créer un menu à plusieurs dimensions à partir d'une table my
Posté : 02 août 2008, 11:40
par g_roseline
bonjour à tous,
Si j'ai bien compris, il est possible de créer un menu à plusieurs dimension à partir d'une base de donnée mysql...
Je souhaiterai un menu qui ressemble à ça :
ITEM (n'ouvre aucune page et ne s'inscrit pas dans le fil d'ariane par la suite)
- > sub item 1
> sub item 2
> sub item 3
- >sub sub item 1
>sub sub item 2
ITEM2
- > sub item 1
> sub item 2
> sub item 3
[/b][/color]
etc... les items amenant à un sous menu ne doivent pas être cliquable, et ne doivent pas s'inscrire dans le fil d'ariane ou alors s'inscrire de cette manière :
>
le monde >
la france > item :
sub item
voici le style de menu que j'aimerai créer :
voilou...je ne sais pas du tout si c'est possible en passant par une base de donnée (mais ce serait l'ideal...)...Comme vous avez pu le voir, je debute tout juste et je patauge beaucoup (mais grace a vos conseils ça va de mieux en mieux !), alors un ti coup de mains, ou un aiguillage dans la bonne direction me ferait plaisir et m'aiderai bien !!!
Posté : 02 août 2008, 13:56
par Berzemus
Pour représenter une telle arborescence, et pour faire simple, je proposerais un tableau de ce type:
id | nom | id_sup
En gros, un identifiant, le nom complet, et l'identifiant de l'élément supérieur. Avec ça, tu peux faire une arborescence aussi profonde que tu veux. Chaque item à un ID. En cliquant sur l'un ou l'autre item, tu ne fais que faire une liste de tout les items dont il est le parent. Tu peux ainsi remonter de fils en père pour constituer un fil.
Et pour le menu "de base", ils ont simplement comme parent "0".
C'est over-simplifié, mais il faut y aller par petits bouts

Posté : 02 août 2008, 14:07
par g_roseline
certe mais cela reviens donc à tout compiler dans un seul et unique tableau ??? ça va etre un tableau monstrueux....et comment avec ce moyen là on génère un menu a plusieurs dimension ???
sinon, j'avais pensé faire plusieurs tableau :
continent (Id_continent, #nom_continent, Url_carte_continent),
pays(ID_Pays, #nom_continent, #nom_pays, Url_carte_pays),
Ville (ID_Ville, #nom_pays, #nom_ville, Url_carte_ville, url_blason, url_drapeau, Supperficie, Densite, population, surnom, specialite)
et enfin une table Menu_ville(ID_menu_ville, #nom_ville, nom_categorie, categorie_parent, url)
c'est pas bon comme méthode ?
Posté : 02 août 2008, 14:51
par Berzemus
monstrueux ? Non. je gère des arborescences de plus de 10.000 termes avec un système semblable (mais plus normalisé/optimisé, mais semblable). Et les dimensions ? a l'infini, en fait.
Après, tu peux faire un tableau "contenu", qui d'après l'id de l'élément, définit son contenu (ville, pays, continent, ce que tu veux). La base ne doit pas refléter la structure de ton site. Il doit être simple et efficace. Multiplier les tableaux dans lesquels, objectivement, tu définis le même type de données, c'est complexifier inutilement ta structure.
Pour bien faire, tu devrais avoir un tableau par "type" de donnée. Donc le menu serait bien dans un tableau séparé.
Et, en regardant tes tableaux, je vois déjà que les données sont redondantes. Le pays devrait contenir l'id du continent, et pas son nom, pareil pour les villes. Après, tu pourrais faire un tableau qui lie les cartes à des ID (mais ce serait pousser le bouchon un peu loin

)
Posté : 02 août 2008, 15:17
par g_roseline
oki donc g bon sauf sur ma clé etrangere !!! c deja beaucoup mieux qu'hier tout ça !!! héhé !!! (mais en fait je vois pas trop la redondence du bazar...que ce soit le no ou l'id ca revient au meme nom ?)
pour le tableau menu_ville, c'est un tableau qui ne servira qu'a créer le menu a plusieurs dimensions ex:
bon encore une tite question : comment faire lors de la creation de mon menu pour créer générer onclick des pages sur les subitems et pas sur les items ??? idem pour le fil d'ariane : comment faire pour qu'il y ai un lien sur les sous-menui et pas sur les items? est-il possible de ne pas les afficher du tout ?
ex :
monde > europe > france > toulouse > espaces verts : prairie des filtres
voila ce que j'aimerai : espace vert c'est transformé en titre du lieu a visiter et non en lien a par entiere...
j'espere que je suis claire....j'ai bien conscience que ce doit etre pleins de questions bête que je pose...mais j'ai vraiment du mal a comprendre la logique de tout ça...et vos reponses m'aident vraiement beaucoup...
Posté : 02 août 2008, 15:18
par Sékiltoyai
Soit dit en passant, s'il faut reconstruire une petite partie de l'arbre seulement, il faudra soit sélectionner toute la table, ce qui ne serait pas adapté à des arbres larges, soit sélectionner les enfants niveau par niveau, ce qui ne serait pas adapté à des arbres profonds.
Donc ta méthode Berzemus a le mérite d'être simple à implémenter et peu coûteuse lors d'une modification de l'arbre, mais à bannir totalement pour des opérations plus complexes sur une partie de l'arbre, auquel cas on privilégie une structure d'arbres intervallaires.
Posté : 02 août 2008, 15:22
par g_roseline
gni ??????

arbre larges ? arbres profond ? arbre intervallaires ? g rien compris....

Posté : 02 août 2008, 15:30
par Sékiltoyai
Arbre large :
Code : Tout sélectionner
a1
|->b1
|->b2
| |->c1
| |->c2
| |->c3
| |->c4
|->b3
|->b4
|->b5
| |->c1
| |->c2
| |->c3
| |->c4
| |->c5
| |->c6
|->b6
|->b7
|->b8
|->b9
|->b10
|->b11
|->b12
Arbre profond :
Code : Tout sélectionner
a1
|->b1
| |->c1
| |->c2
| | |->d1
| | | |->e1
| | | |->e2
|->b2
| |->c1
| | |->d1
| | |->d2
| |->c2
|->b3
| |->c1
| |->c2
| | |->d1
| | |->d2
| |->c3
Arbre intervallaire:
http://sqlpro.developpez.com/cours/arborescence/
Posté : 02 août 2008, 15:34
par g_roseline
damned moi qui commençais enfin a comprendre......................et en clair pour ma situation tu me conseille quoi ?
Posté : 02 août 2008, 15:42
par Sékiltoyai
Cela dépend…
Notamment de :
- Si tu dois reconstruire l'arbre entier à chaque fois ou bien si tu n'as besoin que d'une partie
- Si l'arbre est profond et large
- Si la table contient beaucoup d'enregistrement (confère les deux points précédents)
- Si tu as beaucoup de modifications à faire sur ton arbre
- Si tu te sens d'attaque à implémenter la gestion des arbres intervallaires (d'ailleurs il faudrait que je pense à poster la librairie que j'ai développé…)
- etc…
Je ne dis pas que ce que Berzemus dit est faux. Il est fort probable que ce soit la meilleure solution pour ton cas précis, mais il faut être conscient des limites, et que si l'on commence à posséder un arbre plus complet ou bien des opérations plus complexes qu'une reconstruction totale, cela devient vite un gouffre à performances…
Posté : 02 août 2008, 15:45
par g_roseline
en fait la seule table que je dois reecrire de manière différente pour chaque ville est la derniere : celle du menu....et une mis à part pour cette table, le reste ne bougera pas....pas de modif...
Posté : 02 août 2008, 19:56
par Berzemus
Très chouette article,
Sekiltoyai. Je crois que je vais m'amuser avec
Par contre, g_roseline, on est la dans un niveau assez élevé (d'ailleurs, il est marque "avancé"). Comme Sekil le dis, il est plus que recommandé d'utiliser une solution simple mais efficace, au risque de perdre du temps et de l'énergie inutilement (puisque le résultat seras le même). Une fois ton site fait, tu pourras revenir sur le sujet, et tu pourras le comprendre et l'appliquer plus facilement avec ton expérience déjà faite. Sinon, c'est sans fin que tu vas errer dans le labyrinthe..
Posté : 03 août 2008, 02:00
par g_roseline
c clair.....deja que je suis assez perdue comme ça...