Outils pour utilisateurs

Outils du site


devweb:laravel:menu (lu 26604 fois)

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.'));
devweb/laravel/menu.txt · Dernière modification: 11-05-2015 22:32 de edmc73