2012-12-28 51 views
0

我會按照有關Laravel 3一些教程,知道,我有一個問題,其中一個:Laravel節不會出現

@section('post_navigation') 
@if(Auth::check()) 
    @include('plugins.loggedin_postnav') 
@endif 
@endsection 

爲什麼這個部分不會出現?例如:

我嘗試刪除節中的所有內容,例如;

@section('post_navigation') 
    <h1>Test</h1> 
@endsection 

但是不起作用。

完整的代碼是:

<div class="navbar navbar-inverse navbar-fixed-top"> 
    <div class="navbar-inner"> 
     <div class="container"> 
      {{ HTML::link('/', 'Instapics', array('class' => 'brand')); }} 

      <div class="nav-collapse"> 
       <ul class="nav"> 
        @section('navigation') 
         <li class="active">{{ HTML::link('/', 'Home') }}</li> 
        @yield_section 
       </ul> 
      </div> 

      @section('post_navigation') 
      @if(Auth::check()) 
       @include('plugins.loggedin_postnav') 
      @endif 
      @endsection 

     </div> 
    </div> 
</div> 


[編輯]
我改變@endsection到@yield_section,和作品,但我還是不明白,例如(在User_Controller指數查看):

@section('post_navigation') 
    @parent 
@endsection 

爲什麼不出現包含?

爲什麼我需要更改endsection to yield_section

回答

9

當您使用@section時,您可以定義一個部分,如定義一個變量。然後,您可以在@yield('sectionname')(或通過我在第二段中指定的另一種方式)使用它。例如,你可以看看這個:

@section('scripts') 
    <script src="jquery.js"></script> 
@endsection 

<head> 
    @yield('scripts') 
</head> 

@section/@endsection和@section/@yield_section不一樣的。 @section/@yield_section定義了一個區域區域,而不是一個區域。換句話說,它調用一個變量。實際上它比@section/@endsection更類似於yield('sectionname')。它具有默認值作爲與收益的主要區別。

您可以定義一個具有默認值的區域,然後您可以通過定義一個區域來更改它。這個邏輯主要用於創建和使用佈局。例如,讓下面的頁面成爲我們的main(main.blade.php)佈局。

<html> 
    <head> 
     <title> 
     @section('title') 
     Default Title Maybe Sitename.com 
     @yield_section 
     </title> 
     @include('scripts') 
    </head> 
    <body> 
     <div id="content"> 
     @section('content') 
      Default content 
     @yield_section 
     </div> 
     <div id="sidebar"> 
     @section('sidebar') 
      <ul id="menu"> 
       <li><a href="#">Menu item 1</a></li> 
       <li><a href="#">Menu item 2</a></li> 
       <li><a href="#">Menu item 3</a></li> 
       <li><a href="#">Menu item 4</a></li> 
      </ul> 
     @yield_section 
    </body> 
</html> 

通常不直接使用佈局。另一個頁面在頁面中創建並指定其佈局,如@layout('main')。然後,定義部分,並且laravel模板系統更改定義的部分。讓這頁是我們的內線(post.blade.php)頁:

@layout('main') 

@section('title') 
$post->title - @parent 
@end_section 

@section('content') 
$post->content 
@end_section 

當我們返回後視圖View::make('profile');,你可以看到,佈局邏輯將工作和main.blade.php部分將被改變我們在這個頁面中定義。因此,輸出將是:

<html> 
    <head> 
     <title> 
     Post title - Default Title Maybe Sitename.com 
     </title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
    </head> 
    <body> 
     <div id="content"> 
      Post content 
     </div> 
     <div id="sidebar"> 
      <ul id="menu"> 
       <li><a href="#">Menu item 1</a></li> 
       <li><a href="#">Menu item 2</a></li> 
       <li><a href="#">Menu item 3</a></li> 
       <li><a href="#">Menu item 4</a></li> 
      </ul> 
    </body> 
</html> 

順便說一句,在部分地區和@parent返回默認值@include是同樣的邏輯與包括在PHP。

祝您有愉快的一天。

+0

在這無情的時刻我讀了它,並解決問題,但是,無論如何。 –

1

看起來像你可能已經找到了答案。但它看起來在@ L4中@endsection已被替換爲@stop。嘗試這樣的代替:

@section('scripts') 
    <script src="jquery.js"></script> 
@stop 
+0

謝謝。無論如何,當我使用\ @endsection時,如何在這些部分中添加更多itens? \ @ section9('scripts')\ @stop在我看來? –