[ZF2] Plusieurs menus de navigation dans ZF2

Zend Framework 2 offre un système de rendu de menu très pratique. Une fois la configuration de votre menu faite, le rendu se fait en une ligne de code et le lien de la page courante se voit attribuer la classe ‘active’ automatiquement. Le problème de ce composant est au niveau de la documentation. En effet, celle-ci n’explique pas clairement comment il est possible d’utiliser plusieurs menus sur notre site. Voici comment faire:

Architecture

Ci contre l’architecture globale de la plupart de mes sites réalisés avec zf2.

 

Voici une petite description des dossiers pour vous aider à comprendre :

  • /config : permet la configuration de l’application via des fichiers php
  • /data : contient les données de l’application comme les fichiers de traduction par exemple
  • /module : contient les différents modules de l’application
  • /module/admin : dossier dédié à l’administration de mon site
  • /module/application : dossier dédié au front-office de mon site
  • /module/common : dossier dédié aux parties communes de mes différents sites. Il initialise et configure par exemple la traduction des messages d’erreur et le système d’ACL
  • /vendor : contient les bibliothèques de l’application et les modules récupérés sur internet

La navigation dans Zf2

Dans Zend Framework 2, il existe un composant tout prêt pour créer vos menus. Si vous ne connaissez pas le composant, je vous invite à lire le quick strat de la doc ici.

Il suffit donc de déclarer les différentes pages du menu dans le fichier de configuration ‘module.config.php’ et ensuite de rendre le menu via l’aide de vue ‘navigation’.

Plusieurs menus sur le même site

C’est bien beau ça, mais moi je veux plusieurs menus différents sur mon site.

Ne vous inquiétez pas, nous allons voir comment faire.

 

Comme vous avez pu le voir dans la structure de mon application, je préfère définir la navigation dans un fichier extérieur. La partie navigation de mon fichier ‘module.config.php’ devient alors

Personnellement, j’utilise un menu pour l’administration et un menu pour la partie front office (j’imagine que c’est à peu près le cas pour tout le monde). Je configure le menu de chaque module dans le dossier de configuration de celui-ci.

Le fichier /module/Admin/config/navigation.php :

Le fichier /module/Application/config/navigation.php :

Maintenant que nos menus sont définis et seront chargés automatiquement par zf2, il faut pouvoir désigner lequel sera affiché. Pour cela, nous allons créer une classe qui va dire à zend navigation quel menu afficher. Cette classe doit étendre ‘Zend\Navigation\Service\DefaultNavigationFactory’ et implémenter ‘getName()’ qui doit retourné le nom du menu à afficher.

Par exemple, pour afficher mon menu nommé ‘admin’, je crée la classe suivante :

Pour que zend puisse l’appeler via le service manager, il ne faut pas oublier de la déclarer dans les factories de module.config.php (celui que vous voulez, personnellement, je les déclare dans mon module commun pour pouvoir les réutiliser).

module.config.php

Et voilà, c’est terminé, vous n’avez plus qu’à afficher votre super-menu comme ceci :

Zend Framework va automatiquement instancier ‘AdminNavigationFactory’ , récupérer le nom du menu via la méthode ‘getName()’ et rendre le menu qui porte ce nom.

PS : Pensez à inclure les divers fichiers dont vous avez besoin ou utilisez l’auto-loader de zf2.

 

Ajouter un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *