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) :
Tout mon menu doit être placé dans un array, qui contiendra les menus, puis les sous-menus, dans des array, etc...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE `menu` ( `id_menu` int(11) NOT NULL auto_increment, `nom_menu` varchar(100) NOT NULL, `ordre_menu` int(11) NOT NULL, `id_menu_pere` int(11) NOT NULL, `nb_sous_menu` int(11) NOT NULL, PRIMARY KEY (`id_menu`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=52 ;
Voici le code actuelle :
Comme vous pouvez le voir, pour chaque sous-menus, je fais une requête SQL, et pour l'heure cette page me fais plus de 30 requêtes sql, pour m'afficher ce menu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 function sous_menu($menu_pere) { global $BdD; $sous_menu = Array(); $retour_sous_menu = $BdD->mysql_query('SELECT * FROM menu WHERE id_menu_pere='.$menu_pere['id_menu'].' ORDER BY ordre_menu'); while($donnee_sous_menu = mysql_fetch_array($retour_sous_menu)) { if($donnee_sous_menu['nb_sous_menu']!=0) $donnee_sous_menu['sous_menu'] = sous_menu($donnee_sous_menu); array_push($sous_menu,$donnee_sous_menu); } return $sous_menu; } $menu = Array(); $retour_menu_princ = $BdD->mysql_query('SELECT * FROM menu WHERE id_menu_pere=0 ORDER BY ordre_menu'); while($donnee_menu_princ = mysql_fetch_array($retour_menu_princ)) { if($donnee_menu_princ['nb_sous_menu']!=0) $donnee_menu_princ['sous_menu'] = sous_menu($donnee_menu_princ); array_push($menu,$donnee_menu_princ); }
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)
Partager