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