Ben*_*son 7 php templates template-inheritance blade laravel-4
我有一个场景,我有一个定义标题部分的主模板.看起来像这样......
<!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>
Run Code Online (Sandbox Code Playgroud)
如您所见,我有几个子视图(例如nav_bar和search_bar).每个子视图都有一个附带的.js文件.所以我想扩展nav_bar中的'header'部分,就像这样......
@section('header')
@parent
{{ HTML::script('js/anotherjs.js') }}
@stop
Run Code Online (Sandbox Code Playgroud)
然后再次在search_bar中这样:
@section('header')
@parent
{{ HTML::script('js/yetanotherjs.js') }}
@stop
Run Code Online (Sandbox Code Playgroud)
目的是最终输出的html文件如下所示:
@section('header'){{HTML :: style('css/planesaleing.css')}} {{HTML :: script('js/jquery-1.10.1.js')}} {{HTML :: script('js/search_Bar.js')}} {{HTML :: script('js/anotherjs.js')}} {{HTML :: script('js/yetanotherjs.js')}} @show
但是,只有第一个实际扩展了标题,之后的所有其他标题似乎都被忽略了.无论如何使用多个扩展?
任何建议 - 非常感谢.
首先,当您在视图中扩展布局时,您启动一个部分然后"停止".像这样:
@section('header')
@parent
{{ HTML::script('js/anotherjs.js') }}
@stop
Run Code Online (Sandbox Code Playgroud)
你是如何扩展布局的?我不确定您是否有多个相互扩展的布局,然后通过视图进行扩展,或者您有多个视图,每个视图都扩展了这个特定的布局.现在在以后的情况下,一个视图不会对另一个视图产生任何影响.
如果您使用的是前一种方法,那么更多示例代码将会有所帮助,因为我认为您在某些时候编写了这些值.
希望能帮助到你.
编辑
当你说:
<header>
@yield('header_bar')
@yield('nav_bar')
@yield('search_bar')
</header>
Run Code Online (Sandbox Code Playgroud)
您正在制作具有三个不同名称的占位符.因此nav_bar,search_bar不是子视图,但它们是可以从您的视图填充的占位符.
让我以另一种方式说.当您的视图扩展模板时,它们将填充模板中声明的间隙.所以每个'header','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
Run Code Online (Sandbox Code Playgroud)
现在,如果我们看一下,它将会产生什么:
<!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>
Run Code Online (Sandbox Code Playgroud)
这就是为什么只有第一个似乎是扩展主人.我想你应该重新考虑一下你试图扩展主人的方式.
什么对你有用
@include('view.name') // includes a subview
Run Code Online (Sandbox Code Playgroud)
但是我不确定这些部分是否会从每个子视图级联.你可以尝试一下.
所以你将有一个名为index.blade.php的视图,它看起来像是:
@extends('master')
@include('search_bar')
@include('nav_bar')
@include('foo_bar')
Run Code Online (Sandbox Code Playgroud)
然后你将拥有像search_bar.blade.php这样的单独文件,这些文件将扩展master并填充占位符,如下所示:
@extends('master')
@section('header')
@parent
{{ HTML::script('js/anotherjs.js') }}
@stop
Run Code Online (Sandbox Code Playgroud)
我相信(没有测试过)这应该做你的工作.然后,它可以级联所有子视图的输入并将其组合在一起.所以所有子视图都将填充标题部分,这应该在最终输出中级联在一起.尝试一下,如果它有效,那就太棒了!否则尝试不同的方法来注入脚本.
| 归档时间: |
|
| 查看次数: |
9355 次 |
| 最近记录: |