我会按照一些关于Laravel 3的教程,知道,我有一个问题,一个:
@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 更改为 yield_section ?
答案 0 :(得分:9)
使用@section时,您可以定义一个类似定义变量的部分。然后,您可以通过@yield('sectionname')
(或使用我在第二段中指定的其他方式)在您想要的地方使用它。例如,你可以看一下:
@section('scripts')
<script src="jquery.js"></script>
@endsection
<head>
@yield('scripts')
</head>
@section / @endsection和@section / @yield_section不一样。 @section / @yield_section定义了一个区域,而不是一个区域。换句话说,它调用一个变量。实际上它与yield('sectionname')比@section / @endsection更相似。它具有默认值作为与收益率的主要差异。
您可以定义一个具有默认值的区域,然后您可以通过定义一个区域来更改它。这个逻辑主要用于创建和使用布局。例如,让下面的页面成为我们的主要(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中包含的逻辑相同。
度过愉快的一天。
答案 1 :(得分:1)
好像你可能找到了答案。但看起来@endsection已经被L4中的@stop取代了。尝试这样的事情:
@section('scripts')
<script src="jquery.js"></script>
@stop