2014-04-13 16 views
5

in meiner master.blade.php Datei Ich habe eine Navigation, die ich versuche zusammen zu stellen.aktive Links in Laravel 4

<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> 

Das Problem hier ist, dass alle von ihnen die li aktiviert haben. Nicht die aktuelle Seite. Was mache ich falsch?

Antwort

0

Lynnais und Jarek Tkaczyk haben beide die richtigen Antworten. Aber die Arbeit hier ist
erstellen Sie eine Datei oder Klasse. Wenn Sie die Klasse verwenden, können Sie eine statische Funktion mit einem beliebigen Namen erstellen. Fügen Sie den Dateinamen oder den Klassenordner zur Datei composer.json hinzu.

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

Hier app/Helfer ist der Ordner-Klassen enthalten, die später als die Hilfsklassen verwendet werden können, und app/helpers.php ist die einfache PHP-Datei mit Methoden. Sehen Sie diese Kommata vor 'app/helpers' und "Dateien". Erstellen Sie eine Klasse wie diese.

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

Jetzt ist es nennen, wenn Sie so wollen, von Ansichten

<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> 

ODER

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

Glücklich Codierung. :)

10

Dieses Stück kehrt Objekt

Route::current('home.index') 

Änderung es

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

Und ich schlage vor, eine Hilfsfunktion daraus zu machen, so etwas wie folgt aussehen:

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

Credits für die oben zu Jeffrey bei http://laracasts.com


Sie können Ihre Helfer zum Beispiel in app/helpers.php platzieren, dann müssen Sie es automatisch zu laden in /composer.json

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

Hmm, ich bin neu bei Laravel - wo stelle ich eine Hilfsfunktion? Kannst du mich mit seinem Video verlinken? Gute Antwort! –

+3

https://laracasts.com/lessons/active-states Ich bin mir nicht sicher, ob es frei ist, aber Laracasts ist es wert, etwas $ auszugeben. Und deine Helfer-Funktion geht überall hin, du magst meinen Schnitt in einer Sekunde. –

+1

Süß, ja, schade, dass er Paypal nicht als Abo akzeptiert. Ich habe mir Unterstützung per E-Mail geschickt. Ich habe die composer.json bearbeitet und Composer ausgeführt, aber ich bekomme einen Fehler: http://cl.ly/image/3q3g3m2M0s0a - das ist meine Composer-Datei, und das ist der Fehler: http://cl.ly/image/3O0w1G253y3R –

18

wie so hinzuzufügen, oder einfach einen ternären Betrieb zu verwenden:

<li {{ (Request::is('*login') ? 'class="active"' : '') }}>Login</li> 
+0

Cleaner Lösung. Prost! –