2014-04-13 28 views
5

my master.blade.php dosyasında bir araya getirmeye çalışıyorum bir navigasyon var.laravel 4 içindeki etkin bağlantılar

<nav class="navbar navbar-default" role="navigation"> 
    <div class="container-fluid"> 
    <div class="col-sm-5"> 
    <ul class="nav navbar-nav" > 
     <li class="{{ Route::current('home.index') ? 'active' : '' }}">{{ HTML::linkAction('[email protected]', 'Home') }} 
     <li><a href="">Locations</a></li> 
     <li class="{{ Route::current('order.index') ? 'active' : '' }}">{{ HTML::linkAction('[email protected]', 'Order Online') }} 
    </ul> 
    </div> 
    <div class="col-sm-5 navbar-right"> 
    <ul class="nav navbar-nav navbar-right"> 
     <li class="{{ Route::current('menu.index') ? 'active' : '' }}">{{ HTML::linkAction('[email protected]', 'Menu') }} 
     <li><a href="">About</a></li> 
     <li><a href="">Contact Us</a></li> 
    </ul> 
    </div> 
    <div class="container-fluid"> 
</nav> 

Burada sorun, hepsinin etkin olarak ayarlanmış olması. Mevcut sayfa değil. Neyi yanlış yapıyorum?

cevap

0

Lynnais ve Jarek Tkaczyk'ün her ikisi de doğru cevaplara sahiptir. Ama buradaki çalışma
bir dosya veya sınıf oluşturuyor. Sınıf kullanıyorsanız, dilediğiniz bir isimle bir statik işlev yaratabilirsiniz. Ve dosya adını veya sınıf klasörünü composer.json'a ekleyin.

 
... 
"autoload": { 
    "classmap": [ 
     ... , 
     'app/helpers' 
    ], 
    "files": [ 
     "app/helpers.php" 
    ] 
} 

Burada uygulama/yardımcıları yardımcı sınıflar olarak sonradan kullanılabilen sınıfları içeren klasör ve uygulama/helpers.php yöntemlerle düz bir PHP dosyasıdır. 'uygulama/yardımcılarının' ve dosyalarının önce bu virgülleri görün. Bunun gibi bir sınıf oluşturun. Eğer görünümler

<ul class="nav navbar-nav"> 
    <li class="dropdown {{ \App\Helper\Helper::set_active('/') }}"> {{ HTML::decode(HTML::link('/','<i class="fa fa-home"></i> Home ', array('class' => 'dropdown-toggle'))) }} </li> 
    <li class="dropdown {{ \App\Helper\Helper::set_active('admins') }}"> {{ HTML::decode(HTML::link('/admins','<i class="fa fa-user"></i> Admins ', array('class' => 'dropdown-toggle'))) }} </li>     
</ul> 

VEYA

<li class="{{\App\Helper\Helper::set_active('/')}}">Home</li> 
<li class="{{\App\Helper\Helper::set_active('admins')}}">Admins</li> 

Mutlu kodlama

bunun gibi istediğiniz zaman

namespace App\Helper; 
class Helper{ 
    public static function set_active($route){ 
     return (\Request::is($route.'/*') || \Request::is($route)) ? "active" : ''; 
    } 
} 

Şimdi diyoruz. :)

10

Bu parça döner

Route::currentRouteName() == 'home.index' 

için

Route::current('home.index') 

değiştireceğim bunu nesne Ve bir şey bu gibi bakarak, bunun bir yardımcı işlevi yapmanızı öneriyorum: için

function setActive($route, $class = 'active') 
{ 
    return (Route::currentRouteName() == $route) ? $class : ''; 
} 

Krediler yukarıda Jeffrey'ye göre http://laracasts.com


Sen app/helpers.php örneğin sizin yardımcıları yerleştirebilirsiniz, o zaman bu kadar

... 
"autoload": { 
    "classmap": [ 
     ... 
    ], 
    "files": [ 
     "app/helpers.php" 
    ] 
} 
+2

Hmm, Im to laravel - nerede yardımcı bir işleve koyayım? Beni videoya bağlayabilir misin? Büyük cevap olsa! –

+3

https://laracasts.com/lessons/active-states Ücretsiz olup olmadığından emin değilim, ama lakabazlar biraz dolar harcamıyor. Ve yardımcınız fonksiyonlar istediğiniz her yere gider, benim düzenimi bir saniye içinde çeçeme –

+1

Tatlı, evet, çok kötü bir abonelik olarak paypal kabul etmez. Desteğe e-posta gönderdim. Composer.json dosyasını düzenledim ve besteci çalıştırdım ama bir hata alıyorum: http://cl.ly/image/3q3g3m2M0s0a - bu benim besteci dosyam ve bu da hata: http://cl.ly/image/3O0w1G253y3R –

18

gibi /composer.json içinde autoload eklemek Veya sadece bir üçlü operasyonu kullanmak gerekir:

+0

Temizleyici çözelti. Şerefe! –