Formation PUB010 : PHP, 2025 La table pages

32.3 Table menus pour générer un menu dynamique


Site Web avec plusieurs menus

Il existe plusieurs types de menus qui peuvent être utilisés dans un site Web :

  • Menu principal : il est généralement placé dans le haut de la page Web ou dans la colonne de gauche.
  • Sous-menus : chaque option du menu principal peut avoir un sous-menu, qui se déroule généralement lorsque la souris passe au-dessus de l'option de menu.
  • Menu secondaire : à ne pas confondre avec le sous-menu. Il s'agit d'un autre menu complètement distinct du premier. Parfois, il est représenté par des icônes. Les options du menu secondaire n'ont généralement pas de sous-menus. Un même site Web peut comporter plusieurs menus secondaires, par exemple un premier situé dans le coin supérieur droit de la page et un second situé au bas complètement de la page.

Illustrons ceci à l'aide d'un exemple concret.

Exemple de menus

On y remarques trois menus différents :

  • Le menu principal qui contient les options Clients, Fournisseurs et Rendez-vous;
  • Le sous-menu associé à Client qui contient les options Lister, Ajouter et Facturer;
  • Le menu secondaire qui contient deux icônes : l'accueil et les coordonnées.

Tables menus et pages

Il est très avantageux d'avoir un site Web dont le menu est géré dynamiquement à partir d'une base de données. Il devient alors très facile d'ajouter ou d'enlever une option de menu sans devoir toucher au code.

Tables menu et page

Dans la structure proposée, chaque page peut apparaître dans plus d'une option de menu.

Par exemple, on retrouve souvent la page des coordonnées dans une option du menu principal de même que dans le menu secondaire. La structure permettra de n'entrer qu'une seule fois les informations relatives à la page même si elle se retrouve à plusieurs endroits dans les menus.

Autre exemple : lorsqu'un site propose un menu en pied de page, une même page peut être accessible via le menu principal et via le menu secondaire.

Cette structure permet également de créer des pages qui ne seront pas accessibles à partir d'une option de menu. Par exemple, une page qui détaille un produit, qui ne sera accessible qu'à partir de la page qui liste tous les produits.

Important : la table menus a une clé étrangère (parent_id) qui pointe sur un autre champ de la même table (id). Pour que tout fonctionne correctement, vous ne devez pas ajouter de contrainte d'intégrité référentielle entre ces champs.

La clé étrangère existe mais aucune contrainte ne vérifie ce que vous écrivez dedans.

MySQL

CREATE TABLE menus (
  id int(11) NOT NULL AUTO_INCREMENT,
  page_id int(11) NOT NULL,
  parametres varchar(50) DEFAULT NULL,
  titre varchar(25) NOT NULL,
  parent_id int(11) DEFAULT NULL,
  ordre int(11) NOT NULL,
  icone varchar(50) DEFAULT NULL,
  afficher tinyint(1) NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (parent_id) REFERENCES menus(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Table pages

Cette table est détaillée ici : Travailler avec la table pages.

Table menus

La table menus permet, comme son nom l'indique, de définir les menus.

Mais attention : chacun de ses enregistrements est une OPTION de menu et non un menu en tant que tel.

Voici le détail des informations contenues dans chacun de ses champs.

Champ page_id

Ce champ est une clé étrangère pointant vers la table pages. Il indique quelle page sera affichée lorsque l'option de menu sera sélectionnée.

Champ parametres

Ce champ permet de gérer le cas où une option de menu doit mener à un URL qui contient des paramètres, par exemple « actif=1 ».

Le début de l'URL est stocké dans la table pages.

Ce champ permet d'entrer des valeurs nulles car il n'est nullement requis pour la majorité des options de menu.

Champ titre

Il s'agit du texte qui sera affiché sur cette option de menu.

La taille est limitée à 25 caractères pour des raisons d'affichage.

Champ parent_id

La table menus est bâtie de façon à ce que chaque option de menu puisse pointer sur une autre option de menu pour identifier son parent. Par exemple, un menu « Clients » pourra avoir comme option de sous-menu « Lister », « Ajouter » et « Facturer ». Chacune de ces options de sous-menu pointera sur le menu « Clients » grâce au champ parent_id.

Autrement dit, le champ parent_id est une clé étrangère qui pointe vers un autre champ de la même table, soit id.

Les options du menu principal auront la valeur NULL comme parent_id et les options du menu secondaire auront la valeur -1.

Un menu ou un sous-menu sera donc composé d'une série d'options de menu qui ont la même valeur dans leur champ parent_id.

Champ ordre

Ce champ vous permettra d'indiquer l'ordre dans lequel les options de menu seront affichées. L'usage veut qu'on donne des numéros non consécutifs (ex : 10, 20, 30) pour permettre d'insérer un élément entre deux autres plus facilement.

Champ icone

Il sera possible d'avoir un menu en icônes en inscrivant le nom du fichier de l'icône dans le champ icone ou encore le nom d'une icône du type Font Awesome. Le titre de menu sera alors utilisé dans l'attribut alt de la balise <img> ou dans l'attirbut title de la balise <i>.

Ce champ permet d'entrer des valeurs nulles car il n'est nullement requis pour la majorité des options de menu.

Champ afficher

Avec ce champ, vous pourrez choisir de ne pas afficher une option de menu sans avoir à l'effacer de la table.

Dans quel ordre est-ce que je dois entrer les données ?

Puisque la table menus contient une clé étrangère menant vers la table pages, il est nécessaire de commencer par entrer les données dans la table pages.

Une fois ces données entrées, vous pourrez ajouter les options du menu principal et du menu secondaire.

Les données des sous-menus seront les dernières à être entrées puisqu'elles contiennent deux clés étrangères : page_id et parent_id.

Exemple de données

Revenons à notre exemple présenté plus haut :

Exemple de menus

Voici un extrait des données qui permettent de stocker les informations sur ces menus :

Exemple de données

Exemple de données

Il y a beaucoup trop de id à retenir...

L'entrée des données directement dans phpMyAdmin peut être une tâche difficile puisque pour chaque option de menu, il faut connaître le id de la page qui lui sera associée. Et pour chaque option de sous-menu, il faut connaître en plus le id de son menu parent.

Pour vous faciliter la tâche, il est conseillé de dessiner les menus sur une feuille. À côté de chaque option du menu principal, notez l'id du menu et l'id de la page associée puis entrez ces informations dans la BD. Ensuite, dessinez les options de sous-menu et du menu secondaire et faites la même opération.

Ex :

Noter les id

Si vous préférez, vous pouvez également travailler avec, sous les yeux, trois pages Web différentes :

  • une affichant les données de la table pages (pour retrouver le id de chaque page);
  • une affichant les données de la table menus (pour pouvoir associer un sous-menu à une option du menu principal);
  • et une troisième dans laquelle vous effectuerez l'insertion de données dans la table menu.

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre