2013-09-17 3 views
2

Итак, У меня в основном есть компонент, для которого требуется javascript для загрузки заранее.Как изменить разделы макета из включенных представлений в laravel 4?

мастер макет:

//layouts/master.blade.php 
... 
@yield('scripts') 
... 
@include('forms.search') 
... 

мой компонент:

//forms/search.blade.php 
@section('scripts') 
some scripts here 
@stop 
... 

, что Im призвание:

//main.blade.php 
@extends('layouts.master') 

Это не работает. Раздел не добавляется в заголовок. Я что-то делаю неправильно, или это вообще невозможно с laravel?

+0

Это, безусловно, возможно, у меня есть d один это уже несколько раз. проблема может быть связана с вашими структурами. где находится ваш '// layouts/master.blade.php'? это на 'views/layouts/master.blade.php'? как выглядит ваша структура? – reikyoushin

+0

В чем проблема со структурой? Все в комментариях кода. Все файлы загружаются с помощью laravel, это не проблема с каталогом –

ответ

0

Вы пытаетесь предоставить раздел перед включением. Поэтому попробуйте это.

В вашем //main.blade.php

@extends('layouts.master') 

И //layouts/master.blade.php

@include('forms.search') 

И // формы/поиск. blade.php

some scripts here 
0

вы звоните

@extends('layouts.master') 

который имеет

@yield('scripts') 

но вы декларирование скриптов раздела на forms/search.blade.php

так, если вы исследуете правильно, вы декларирование скрипты на шаблоне неправильно лопастного ИЛИ вы поместили область урожая на неправильный шаблон клипа .. потому что, поскольку @yield находится на layouts/master.blade.php, он был выполнен уже до @include, который не расширяет ничего, поэтому объявление @section th было бы неважно.

добиться того, что вы хотите, раздел

@section('scripts') 
some scripts here 
@stop 

должен быть в файле main.blade.php ..

, если я собираюсь сделать это, это будет что-то вроде этого:

макеты/master.blade.php

<html> 
    <head> 
     <!-- more stuff here --> 

     @yield('scripts') 
     <!-- or put it in the footer if you like --> 
    </head> 
    <body> 
     @yield('search-form') 
     @yield('content') 
    </body> 
</html> 

формы/search.blade.php

//do whatever here 

main.blade.PHP

@extends('layouts/master') 

@section('scripts') 
    {{ HTML::script('assets/js/search-form.js') }} 
@stop 

@section('search-form') 
    @include('forms/search') 
@stop 

ИЛИ удалить @yield('search-form') полностью на master.blade.php и main.blade.php сделать это:

@section('scripts') 
    {{ HTML::script('assets/js/search-form.js') }} 
@stop 

@section('content') 
    @include('forms/search') 
    <!-- other stuff here --> 
@stop 
+0

, вы знаете, проблема в том, что форма поиска и главный шаблон не связаны. Основной шаблон может жить без этой формы, и форма может быть в любом другом месте, в котором я нуждаюсь. Так как я понял, что в мастер-шаблоне нет способа сделать это. –

+0

первая версия может жить без формы. вы также можете включить шаблоны на уровне контроллера, если это то, что вы хотите. вы просто подготавливаете, какой контент будет работать с использованием контейнера наподобие [this] (http://jasonlewis.me/article/laravel-controller-and-route-layouts), затем подготовьте один макет с формой поиска и без него. – reikyoushin

0

У меня была та же проблема, Что есть он работал для меня, добавляя «@parent» во ВСЕХ мои разделы ...

{{-- Main area where you want to "yield" --}} 
@section('js') 
@show 

@section('js') 
    @parent 

    {{-- Code Here --}} 
@stop 

 Смежные вопросы

  • Нет связанных вопросов^_^