Bonjour,
Afin de poursuivre mon auto-formation à symfony, j'ai tenté de créer un composant menu, l'objectif étant de bien comprendre le fonctionnement (l'utilisation d'un plugin pourrait facilité la chose mais ne m'aidera pas dans mon apprentissage)
Voici ce que j'ai donc fait :
Code schema.yml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Menu: connection: doctrine tableName: sfMenu columns: label: type: string(20) url: type: string(255) priority: type: integer # label : libellé du menu. ex: "accueil" # url : cible de l'item menu. ex: "http://localhost/frontend_dev.php/accueil" # priority : indice permettant d'ordonner les menus. ex: 1
Code layout.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4[...] <?php include_component("menu","index"); ?> [...]
Le composant Menu et son template :
Code components.class.php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class menuComponents extends sfComponents { public function executeIndex(sfWebRequest $request) { // getMenus renvoit la liste des menus ordonnés selon Priority (orderBy) $this->menus = Doctrine_Core::getTable('Menu')->getMenus(); // affecte à currentMenu l'url demandé $this->currentMenu = $request->getUri(); } }
Code _index.php : 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 <div id="menu" class="float-right"> <ul> <?php $last = count($menus)-1; foreach ($menus as $key=>$menu) { echo "<li>"; if ($menu->getUrl()==$currentMenu) { echo "<span class=\"menuonpage\">".$menu->getLabel()."</span>"; } else { echo link_to($menu->getLabel(),$menu->getUrl()); } if ($key < $last) { echo " | " ;} echo "</li>"; } ?> </ul> </div>
Mon menu fonctionne bien pour un contexte donné. Cependant, je ne suis pas certain que ma méthode soit "symfony-friendly" et, comme elle tient compte d'urls absolues, elle ne fonctionne pas en dehors de son contexte (frontend_dev.php/prod/etc).
Bref, je suis preneur de tout conseil
Merci d'avance.
PS: pour détailler le fonctionnement, mon menu se présente ainsi :
accueil | blog | contact
accueil est en gras car il s'agit de la page courante
les autres liens (soulignés) représente les liens vers les autres pages
Partager