2013-06-05 21 views
5

Ich habe SO gesucht, und in der Laravel-Dokumentation gegraben, aber ich bin mir nicht sicher, ob ich ganz verstehe, wenn was ich tun möchte, getan werden kann.Nesting Ansichten mit Laravel Blade

Ich benutze Laravel 4. Ich möchte wissen, wie ich Ansichten in anderen Ansichten verschachteln kann.

Zum Beispiel habe ich eine Basislayout .. nennen wir es layout.blade.php

<html> 
    <head> 
     <title>{{ $title }}</title> 
    </head> 
    <body> 
     @yield('nav') 
     @yield('content') 
    </body> 
</html> 

Als nächstes habe ich eine Schaufel für eine Seite home genannt:

@extends('layout') 

@section('nav') 
<p>NAVIGATION</P> 
@end 

@section('content') 
<p>HELLO WORLD!</P> 
@end 

Ich habe ein paar verschiedene Navigationslayouts eine für Admins, eine andere für Superuser und eine für normale Benutzer.

Gibt es eine Möglichkeit, innerhalb der section('nav') eine weitere Blade-Ansicht hinzuzufügen?

@section('nav') 
// do something magical here? 
@end 

Es macht keinen Sinn, dass für jedes Blade-Layout muss ich den Navigationscode wiederholen, wenn mehrere Schnipsel wiederverwendet werden kann.

Antwort

10

können Sie tun, um diese

@section('nav') 
    @include('another') 
    @include('magical') 
    @include('snippet') 
@end 
+0

Boom ... Das war, was ich suchte .. Ich denke, meine Syntax war ausgeschaltet, als ich getestet habe. – Michael

0

Auch wenn dies spät können Sie auch dies tun:

zB. in einem admin.php Sie dies haben kann:

dieses Ich antworte nicht
@extends('home') 

@section('nav') 
    // navigation 
@endsection 

@section('content') 
    // admin page content 
@endsection 

sagen besser ist oder nicht nur Ihre Frage auf Verschachtelung Ansichten mit Klinge, das ist, wie ich Nest meine Ansichten.

6

Eine andere Lösung, falls Sie verschiedene Teilansichten dynamisch laden möchten, können Sie unter Verwendung der View Klasse verschachteln. Z.B. Sie könnten die folgenden in einer Route/Regler haben:

return View::make('home')->nest('subnav','home/nav', array('some' => 'data'); 

und dann in Ihrem home.blade.php, können Sie dies tun:

@extends('layout') 

@section('nav') 
<p>NAVIGATION</p> 
{{ $subnav }} 
@end 

@section('content') 
<p>HELLO WORLD!</p> 
@end 

mit einem Dies kann auch beinhalten und eine variable getan werden (@include($viewname, array('some' => 'data')) Allerdings würde ich sagen, es ist sauberer, da es die Logik aus der Ansicht entfernt, insbesondere wenn Ihre verschachtelten Ansichten nicht immer die gleiche Blade-Datei sind.