2013-06-05 16 views
5

Ho cercato SO e ho scavato nella documentazione di Laravel, ma non sono sicuro di capire bene se si possa fare quello che vorrei fare.Nidificazione di viste con laravel Blade

Sto utilizzando Laravel 4. Voglio sapere come posso nidificare le viste in altre viste.

Ad esempio, ho un layout di base .. consente di chiamare layout.blade.php

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

successivo ho una lama per una pagina chiamata home:

@extends('layout') 

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

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

Ho un paio di diversi layout di navigazione , uno per gli amministratori, un altro per i super utenti e un altro per gli utenti regolari.

C'è un modo per aggiungere un'altra vista blade all'interno di section('nav')?

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

Non ha senso che per ogni layout di lama che ho bisogno di ripetere il codice di navigazione quando vari frammenti possono essere riutilizzati.

risposta

10

È possibile farlo

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

Boom ... Questo è quello che stavo cercando .. Penso che la mia sintassi fosse disattivata quando ho provato. – Michael

0

Anche se questo è in ritardo si può anche fare questo:

ad es. in un admin.php si può avere questo:

@extends('home') 

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

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

Non dire questo è meglio o no sto solo rispondendo alla domanda sulle viste di nidificazione con lama, questo è come mi nido le mie opinioni.

6

Un'altra soluzione, nel caso in cui si desideri caricare in modo dinamico diverse visualizzazioni secondarie, è possibile nidificare utilizzando la classe View. Per esempio. si potrebbe avere quanto segue in un percorso/controller:

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

e poi nel vostro home.blade.php, si potrebbe fare questo:

@extends('layout') 

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

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

Questo può essere fatto con un include e una variabile, nonché (@include($viewname, array('some' => 'data')) tuttavia direi che è più pulito in quanto rimuove la logica dalla vista, in particolare se le viste nidificate non sono sempre lo stesso file blade.

Problemi correlati