J'ai un peu de mal avec le procédé à utiliser...
- Faut-il créer une seule table avec un niveau hierarchique pour chaque catégorie et un "parentId" référent ?
- Ou une table pour chaque niveau hierarchique en faisant une jointure ?
- Comment on gère le multilingue dans ce cas ?
ex:
<hr size="2" width="100%" />id | libelé | level_id | position-id | parent_id | EN | ES |
<hr size="2" width="100%" />1 | Catégorie1 | 1 | 1 | 0 |.......................|.......................|
2 | Catégorie2 | 1 | 2 | 0 |.......................|.......................|
3 | Sous_Catégorie1 | 2 | 1 | 2 |.......................|.......................|
4 | Sous_Catégorie2 | 2 | 2 | 2 |.......................|.......................|
5 | Présentation | 3 | 1 | 4 |.......................|.......................|
6 | Documentation | 3 | 2 | 4 |.......................|.......................|
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 7 déc. 2007 à 00:09
Oui, je comprends ton idée. Mais ça veut dire que dans la même table, le menu est dupliqué pour autant de langues existantes. Les données sont redondantes. C'est pas ce que j'appelle de l'optimisation. Un MCD MERISE n'aboutirait sûrement pas à cette méthode de stockage des données, puisqu'on évite, en général, de stocker une information en double.
On a alors les titre dans chaque langue stockés dans une table séparée, avec une jointure. C'est performant une jointure. Peut-être même plus qu'un WHERE (à bencher pour voir).
Avoir une table séparée n'est vraiment justifié que si on projette d'avoir d'autres langues. Si on n'en a que deux (ou trois, peu importe, un nombre fixe quoi, et qui n'est pas voué à évoluer, JAMAIS) on peut stocker les traductions dans la même table. Ca évite le where et la jointure : c'est encore plus performant, puisqu'on choisit tel ou tel champ suivant la langue (une simple variable php).
Une autre solution est de donner aux items du menu des noms qui seront des clés de traduction (qu'on utilise un tableau, une classe ou autre).
Ca rend la traduction indépendante de la base de données, ça permet d'ajouter autant de langues qu'on veut, ça mange moins de ressources SQL...
Bringdal
Messages postés10Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention 7 décembre 2007 6 déc. 2007 à 16:07
Bonjour,
Ta proposition me va tout à fait mais j'ai encore un petit doute pour le multilingue.
Si je pouvais avoir un autre avis sur la question, ca m'aiderais.
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 6 déc. 2007 à 23:00
Salut,
J'vais donner mon avis...
J'suis d'accord avec yoman64. Stocker l'id de la catégorie parente est probablement la meilleure solution. Cela permet en outre de construire l'arbre du menu avec une seule requête SQL et une seule boucle, sans récursivité.
Pour la traduction, par contre, deux façons de voir les choses.
Soit tu stockes les traductions dans une table séparée, ce qui te permet de traduire ton menu dans autant de langues que tu le veux, soit tu peux, comme tu le pensais, stocker la traduction dans la même table, à la condition que tu n'aies qu'un nombre bien déterminé de langues.
La première façon de faire permet de rajouter des langues à tout moment très facilement.
La seconde est plus facile à mettre en oeuvre, mais est beaucoup moins souple, puisqu'elle nécessite une modification de la structure de la table pour ajouter une langue. Moins souple, mais plus performante si tu n'as que deux langues. Il te suffit de choisir le nom du champ à récupérer en fonction de la langue.
Vous n’avez pas trouvé la réponse que vous recherchez ?
yoman64
Messages postés962Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 2 août 20102 6 déc. 2007 à 23:47
Salut,
neigedhivers> Moi je pensais plus a une colonne nomé lang de type ENUM('EN','FR','ES')
Je sais pas si tu me suis, pour construire le menu en français suffis de rajouté un WHERE lang='EN' ou lang='FR' selon la langue! Comme ça on récupère seulement les éléments relatif à la langue, comme si on avait plusieurs tables differentes, mais on gagne encore en performance et en simplicité.
Donc au lieu d'avoir une table par langue tu peux avoir autant de langues que tu veux dans la meme table.
-------------------
Vous cherchez un hebergement Php/MySQL Gratuit et sans publicités ??
Et bien c'est la : www.e3b.org
Bringdal
Messages postés10Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention 7 décembre 2007 7 déc. 2007 à 09:58
Il est vrai que je doutais sur la duplication de donnée.
Je vais prendre la solution de "neigedhiver" pour le multilingue.
merci pour le reste des infos "yoman".