Table des matières

Gestion des menus

Class Menu

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';
		}
	}
}

Controller

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');
	}
J’utilise un routage par controller, ma fonction getIndex correspond à un Route::get('/')

Si votre controller concerne un seul menu vous pouvez globaliser le tout via le constructeur

  public function __construct(){
    Menu::set('accueil');
  }

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.

<li class="{{ Menu::active('accueil') }}">{{HTML::link(url('accueil'),'Accueil')}}</li>
Dans l’exemple, le moteur de template Blade est utilisé, d’où la notation entre double-accolade

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.'));