Je me suis créé une petite class static afin de stocker le menu actif
J’ai placé ce bout de code dans app/start/global.php mais c’est ptete pas le meilleur endroit.
/** * Menu */ class Menu{ protected static $menu; protected static $sousmenu; public static function set($menu, $sousmenu=null){ self::$menu = $menu; self::$sousmenu = $sousmenu; } 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'; } } }
Maintenant dans votre controller, à chaque appel d’une page vous pouvez définir quel menu est actif.
public function getIndex() { Menu::set('accueil'); return View::make('accueil'); }
Si votre controller concerne un seul menu vous pouvez globaliser le tout via le constructeur
public function __construct(){ Menu::set('accueil'); }
Dans votre vue, il n’y a plus qu’à écrire ce bout de code pour définir une class active sur le menu actif.
<li class="{{ Menu::active('accueil') }}">{{HTML::link(url('accueil'),'Accueil')}}</li>
On peut aussi utiliser des routes nommés pour gérer le menu actif.
<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>
Dans ce cas il faut nommer les routes comme suit
Route::controller('/','AccueilController',array('getIndex' => 'accueil.')); Route::controller('contact','ContactController',array('getIndex' => 'contact.'));