|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Inscription : mars 2008 Messages : 37 ![]() |
Bonjour à tous,
je développe actuellement un site personnel en PHP. Là je travaille sur le menu principale. Ce menu se compose de sous-menus, qui peuvent contenir des sous-menus, etc... Tous le menus est enregistré dans une table de ma base de donnée (MySql), dont voici la structure (j'ai enlevé les colonnes inutiles) : Code :
Voici le code actuelle : Code :
Pouvez vous m'aider à améliorer ce script ? Merci d'avance pour vos réponse et pour votre aide. Information : Le fait de mettre le menu de la sorte dans un array est très important car j'utilise le template Smarty pour l'affichage de mes pages. EDIT : Descriptions des champs : id_menu (Id du menu) nom_menu (Nom a afficher) ordre_menu (ordre d'affichage, 1, 2, 3, etc... ) id_menu_pere (id de menu a qui appartient ce menu, 0 pour le premier menu) nb_sous_menu (Nombre de sous-menu, 0 si pas de sous-menus) |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Développeur informatique Inscription : février 2005 Messages : 2 982 ![]() |
Dans ton cas tu n'auras pas tellement le choix. A chaque niveau tu dois faire une requêtes. Je me suis retrouvé dans la même problèmatique que toi. Seul solution que j'ai trouvé qui permet de le faire en une seul requête.
C'est d'utiliser un champs texte ayant se format. 111 111.111 111.112 111.113 111.113.111 112 112.111 Avec un champs qui à ce genre d'information il facile de savoir le niveau, la profondeur, son parent. Bref en une seul requête avec un LIKE '111.___' ou LIKE '111.%' ça permet de chercher très facilement. De pouvoir boucler sur les niveaux. Ceci avec qu'une requête SQL. Je ne fait rien pour générer ces chiffres je le gère automatiquement dans une procédure stocké
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : mars 2008 Messages : 37 ![]() |
Je n'ai pas très bien compris comment tu as fait.
Mais j'ai trouvé une solution, pour n'en faire qu'une seule, le problème c'est que je parcours la table en entier, pour chaque menu. Qu'est-ce qui est le mieux, faire une requête sql, mais alourdir le code php, ou faire plusieurs requêtes mais avoir un code php rapide ? Voici comment j'ai fait pour ceux que ça intéresse : Code :
|
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Développeur informatique Inscription : février 2005 Messages : 2 982 ![]() |
Je dirais qu'il est préférable d'"allourdir" le php que la base de données mais le bute c'est qu'il faut être claire lorsque tu reviens dessus ou une autre personne.
La technique que je te proposais était de placer le plan pour chaque enregistrement. Exemple : 111.112.111 signifie que l'enregistrement courant est dans une deuxième profondeur. Sont parent c'est le 112 et le parent de celui-ci est 111. Bref, c'est un moyen simple de récolter des informations sur un élément hiérarchisé. Donc si tu fais : Code :
SELECT * FROM maTable WHERE level LIKE '111%' ORDER BY level 1 : 111 2 : 111.112 3 : 111.112.111 Dans le tableau que tu parcours tu peux faire tes sous menu à partir du moment ou tu change de profondeur. Là c'est facile à les détecter.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : mars 2008 Messages : 37 ![]() |
Ok, là je vois comment tu veux le faire, et donc pour chaque menu tu fais une requête sql.
Mais si je fais ça de la sorte, je vais rencontrer un autre problème (possible à réaliser, mais là aussi lourd), qui est la gestion de ce menu. En fait j'ai une page d'administration qui me permet d'administrer ce menu, ainsi que l'ordre d'affichage des menus, et des sous-menus. Ainsi pour cette exemple : 111 111.111 111.111.111 111.111.112 111.112 112 113 113.111 Si je passe le 2ème menu en premier il ma faudra tout changer de la sorte : 112 112.111 112.111.111 112.111.112 112.112 111 113 113.111 Je pense que tu vois où est le problème à ce niveau. Merci pour tes réponses. |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Développeur informatique Inscription : février 2005 Messages : 2 982 ![]() |
C'est un risque en effet. Mais je me préocupe pas de cela. J'ai un champs ordre. C'est celle-ci que je me base. Le level permet seulement de savoir à qui est ton parent et de connaitre son origine.
Personnellement j'ai pas terminé lorsque je fais une modificiation de menu mais c'est prévus. Comme je te le disais, je suis dans le même cas que toi. Mon cas est que ma menu peut se retrouver dans un autre sous menu. Il faut que je fasse l'algo pour cela. En gros c'est le principe de la taxinomie ou taxonomie.
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com