我有一个场景,我有一个定义标题部分的主模板。它看起来像这样......
<!DOCTYPE html>
<html>
<head>
@section('header')
{{ HTML::style('css/planesaleing.css') }}
{{ HTML::script('js/jquery-1.10.1.js') }}
{{ HTML::script('js/search_Bar.js') }}
@show
</head>
<body>
<div class="planesaleing_page">
<header>
@yield('header_bar')
@yield('nav_bar')
@yield('search_bar')
</header>
<div class="main_page">
// Some more code
</div>
@yield('footer')
</div>
</body>
</html>
如您所见,我有几个子视图(例如nav_bar和search_bar)。每个子视图都有一个附带的.js文件。所以我想扩展标题&#39; nav_bar中的部分就像这样...
@section('header')
@parent
{{ HTML::script('js/anotherjs.js') }}
@stop
然后再次在search_bar中这样:
@section('header')
@parent
{{ HTML::script('js/yetanotherjs.js') }}
@stop
目的是最终输出的html文件如下所示:
@section(&#39;头&#39;) {{HTML :: style(&#39; css / planesaleing.css&#39;)}} {{HTML :: script(&#39; js / jquery-1.10.1.js&#39;)}} {{HTML :: script(&#39; js / search_Bar.js&#39;)}} {{HTML :: script(&#39; js / anotherjs.js&#39;)}} {{HTML :: script(&#39; js / yetanotherjs.js&#39;)}} @节目
但是,只有第一个实际扩展了标题,之后的所有其他标题似乎都被忽略了。无论如何都要使用多个扩展名吗?
任何建议 - 非常感谢。
答案 0 :(得分:9)
首先,在视图中扩展布局时,先启动一个部分,然后“停止”。像这样:
@section('header')
@parent
{{ HTML::script('js/anotherjs.js') }}
@stop
你如何扩展布局?我不确定您是否有多个相互扩展的布局,然后通过视图进行扩展,或者您有多个视图,每个视图都扩展了这个特定的布局。现在在以后的情况下,一个视图不会对另一个视图产生任何影响。
如果您使用的是前一种方法,那么更多示例代码会有所帮助,因为我认为您在某个时间点编写了这些值。
希望它有所帮助。
修改强>
当你说:
<header>
@yield('header_bar')
@yield('nav_bar')
@yield('search_bar')
</header>
您正在制作具有三个不同名称的占位符。因此nav_bar,search_bar不是子视图,但它们是可以从您的视图填充的占位符。
让我以另一种方式说。当您的视图扩展模板时,它们将填充模板中声明的间隙。因此,每个'标题','search_bar'等都需要填充 ONCE 。因此,如果您有一个名为index.blade.php的视图,则可以填写一次。所以你可以像这样使用index.blade.php:
@section('header')
@parent
{{ HTML::script('js/anotherjs.js') }}
@stop
@section('header_bar')
@parent
{{ HTML::script('js/yetanotherjs.js') }}
@stop
@section('nav_bar')
@parent
{{ HTML::script('js/foojs.js') }}
@stop
@section('search_bar')
@parent
{{ HTML::script('js/foojs.js') }}
@stop
现在,如果我们看一下,它将会产生什么:
<!DOCTYPE html>
<html>
<head>
@section('header')
{{ HTML::style('css/planesaleing.css') }}
{{ HTML::script('js/jquery-1.10.1.js') }}
{{ HTML::script('js/search_Bar.js') }}//from parent till this point
{{ HTML::script('js/anotherjs.js') }} //comes from view
@show
</head>
<body>
<div class="planesaleing_page">
<header>
{{ HTML::script('js/yetanotherjs.js') }} //comes in place of header_bar as nothing in parent
//@yield('header_bar')
{{ HTML::script('js/foojs.js') }}//comes in place of nav_bar as nothing in parent
//@yield('nav_bar')
{{ HTML::script('js/foojs.js') }}//comes in place for search_bar as nothing in parent
//@yield('search_bar')
</header>
<div class="main_page">
// Some more code
</div>
@yield('footer')
</div>
</body>
</html>
这就是为什么只有第一个似乎在扩展主人。我想你应该重新考虑一下你试图扩展主人的方式。
什么对你有用
@include('view.name') // includes a subview
但是我不确定这些部分是否会从每个子视图级联。你可以尝试一下。
所以你将有一个名为index.blade.php的视图,它看起来像是:
@extends('master')
@include('search_bar')
@include('nav_bar')
@include('foo_bar')
然后您将拥有单独的文件,例如search_bar.blade.php和其他文件,这些文件将扩展master并填充占位符,如下所示:
@extends('master')
@section('header')
@parent
{{ HTML::script('js/anotherjs.js') }}
@stop
我相信(没有测试过)这应该做你的工作。然后,它可以级联所有子视图的输入并将其组合在一起。所以所有子视图都将填充标题部分,这应该在最终输出中级联在一起。尝试一下,如果它有效,那就太棒了!否则尝试不同的方法来注入脚本。