2013-06-05 20 views
5

Szukałem SO i wykopałem dokumentację Laravel, ale nie jestem pewien czy rozumiem, czy to, co chciałbym robić, może być zrobione.Zagnieżdżanie widoków za pomocą laravel Blade

Używam Laravel 4. Chcę wiedzieć, jak zagnieżdżać widoki w innych widokach.

Na przykład, mam układ bazowy .. pozwala wywołać layout.blade.php

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

Dalej mam nóż na stronie o nazwie home:

@extends('layout') 

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

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

Mam kilka różnych układów nawigacyjnych , jeden dla administratorów, inny dla superużytkowników, a drugi dla zwykłych użytkowników.

Czy istnieje sposób dodania kolejnego widoku ostrza wewnątrz section('nav')?

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

Nie ma sensu, że dla każdego układu ostrzy muszę powtórzyć kod nawigacji, gdy kilka fragmentów może być ponownie wykorzystanych.

Odpowiedz

10

Można to zrobić

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

Boom ... To było to, czego szukałem .. Myślę, że moja składnia była wyłączona, kiedy testowałem. – Michael

0

Mimo to późno można też to zrobić:

np. w admin.php można mieć to:

@extends('home') 

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

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

Nie mówiąc to jest lepsze, czy nie jestem po prostu odpowiadając na pytanie o gniazdujących poglądów z ostrzem, to jest jak się zagnieździć moje poglądy.

6

Innym rozwiązaniem, na wypadek gdybyś chciał dynamicznie załadować różne subviews, możesz zagnieździć się przy użyciu klasy View. Na przykład. można mieć następujące w trasie/kontrolera:

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

a potem w swoim home.blade.php, można to zrobić:

@extends('layout') 

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

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

Można to zrobić z include i zmienną, jak również (@include($viewname, array('some' => 'data')) jednak powiedziałbym, że jest bardziej przejrzysty, ponieważ usuwa logikę z widoku, szczególnie jeśli zagnieżdżone widoki nie zawsze są tym samym plikiem typu blade.

Powiązane problemy