Outils pour utilisateurs

Outils du site


devweb:laravel:menu (lu 26959 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
devweb:laravel:menu [20-10-2013 11:50]
edmc73 [Controller]
devweb:laravel:menu [11-05-2015 22:32] (Version actuelle)
edmc73
Ligne 5: Ligne 5:
 Je me suis créé une petite class static afin de stocker le menu actif Je me suis créé une petite class static afin de stocker le menu actif
  
-J'ai placé ce bout de code dans **app/start/local.php** mais c'est ptete pas le meilleur endroit.+J'ai placé ce bout de code dans **app/start/global.php** mais c'est ptete pas le meilleur endroit.
 <code php> <code php>
 /** /**
Ligne 12: Ligne 12:
 class Menu{ class Menu{
  protected static $menu;  protected static $menu;
- public static function set($menu){+ protected static $sousmenu; 
 + 
 + public static function set($menu, $sousmenu=null){
  self::$menu = $menu;  self::$menu = $menu;
 + self::$sousmenu = $sousmenu;
  }  }
- public static function get(){ + 
- return self::$menu;+ public static function active($menu,$sousmenu=null){ 
 + if(is_null($sousmenu)){ 
 + if($menu==self::$menu) 
 + return 'active'; 
 + }else{ 
 + if($menu==self::$menu and $sousmenu==self::$sousmenu) 
 + return 'active'; 
 + }
  }  }
 } }
 +
 </code> </code>
  
Ligne 30: Ligne 41:
 </code> </code>
 <note>J'utilise un routage par controller, ma fonction getIndex correspond à un Route::get('/')</note> <note>J'utilise un routage par controller, ma fonction getIndex correspond à un Route::get('/')</note>
 +
 +Si votre controller concerne un seul menu vous pouvez globaliser le tout via le constructeur
 +<code php>
 +  public function __construct(){
 +    Menu::set('accueil');
 +  }
 +</code>
 ===== View ===== ===== View =====
 Dans votre vue, il n'y a plus qu'à écrire ce bout de code pour définir une class **active** sur le menu actif. Dans votre vue, il n'y a plus qu'à écrire ce bout de code pour définir une class **active** sur le menu actif.
 <code php> <code php>
-<li{{Menu::get()=='accueil'?' class="active"':''}}>{{HTML::link(url('accueil'),'Accueil')}}</li>+<li class="{{ Menu::active('accueil'}}">{{HTML::link(url('accueil'),'Accueil')}}</li> 
 +</code> 
 +<note>Dans l'exemple, le moteur de template **Blade** est utilisé, d'où la notation entre double-accolade</note> 
 + 
 +On peut aussi utiliser des routes nommés pour gérer le menu actif. 
 +<code php> 
 +<a href="{{URL::route('accueil.')}}" class="{{ str_is('accueil.*',Route::currentRouteName()) ? 'active' : '' }}">Accueil</a> 
 +<a href="{{URL::route('contact.')}}" class="{{ str_is('contact.*',Route::currentRouteName()) ? 'active' : '' }}">Contact</a> 
 +</code> 
 + 
 +Dans ce cas il faut nommer les routes comme suit 
 +<code php> 
 +Route::controller('/','AccueilController',array('getIndex' => 'accueil.')); 
 +Route::controller('contact','ContactController',array('getIndex' => 'contact.'));
 </code> </code>
-<note>Dans l'exemple, le moteur de template **Blade** est utilisé, d'ou la notation entre double-accolade</note> 
devweb/laravel/menu.1382262649.txt.gz · Dernière modification: 20-10-2013 11:50 de edmc73