Laravel Blade - выход внутри секции
Я пытаюсь дать раздел внутри другого раздела. Но это не работает, как ожидалось, я вижу пустой вывод.
@section('3show')
This is a text string
@stop
@section('page-content')
<div id="content">
<article>
@yield('3show')
</article>
</div>
<!--#content-->
@stop
Любые идеи для вывода раздела внутри другого раздела?
Ответы
Ответ 1
Хорошо, это то, что я пробовал, и могу подтвердить, что это работает, по крайней мере, для Laravel 5+ (у меня L5.2). Вот как я предлагаю вам использовать ваши шаблоны клинков.
Давайте начнем говорить, что для получения раздела в другой раздел вы должны определить свой включенный раздел перед определением секции контейнера. Итак, с этим ясным, я решил эту ситуацию следующим образом:
У меня есть шаблон основного клинка (main.blade.php), который имеет что-то вроде:
<section class="content">
<!-- Your Page Content Here -->
@yield('main-content')
</section><!-- /.content -->
У меня есть второй клик (common.blade.php), который имеет тот общий материал, который вы можете показать на многих страницах, и где определен раздел основного контента. Это выглядит следующим образом:
@section('main-content')
<div class="container">
@yield('extra-content')
</div>
@endsection
Наконец, я получил третий шаблон (test.blade.php), который расширяет основной шаблон и включает общий материал, который я хочу показать, но будьте осторожны, потому что порядок имеет значение. Это выглядит следующим образом:
@extends('main')
@section('extra-content')
<div>
<span> This is a test! </span>
</div>
@endsection
@include('common')
В вашем контроллере или вашем маршруте (где бы вы не вернули свое представление) вы должны вернуть третий шаблон.
Ответ 2
В моих проектах я создаю некоторые частичные части, чтобы иметь более чистый код, и я даю им в качестве примера имя: 3show.blade.php. Чтобы использовать их в разделе, я просто их включаю.
Я думаю, что это сделает то, что вы хотите.
@section('content')
@include('3show.blade.php')
@endsection
Ответ 3
раствор 1:
вы можете использовать @show
вместо @stop
в конце раздела
то laravel сделает ваши части @yield
...
вот так:
@section('page-content')
<div id="content">
<article>
@yield('3show')
</article>
</div>
@show # not @stop
@section('3show')
This is a text string
@stop
таким образом вы можете просмотреть и показать результат
поэтому, если вы дважды разделите свой раздел, результат будет дважды увеличен.
решение 2:
включить секцию вызова перед yiel it
например:
**first call section :**
@section('3show')
This is a text string
@stop
**then define your section : 3show**
@section('page-content')
<div id="content">
<article>
@yield('3show')
</article>
</div>
@stop **not @show**
Ответ 4
Предположим, у вас есть два файла:
-article_base.blade.php → данные по умолчанию в каждой статье.
-article_index.blade.php → настроенный файл.
article_base.blade.php
@extends('layout')
@section('page-content')
<div id="content">
<article>
....
@yield('3show')
....
</article>
</div>
<!--#content-->
@stop
article_index.blade.php
@extends('article_base')
@section('3show')
This is a text string
@endsection
Я надеюсь, что это работает
Ответ 5
У вас есть как @include, так и @yield дочерний шаблон в вашем основном шаблоне, чтобы иметь возможность добавлять дочерний шаблон в определенном месте внутри основного шаблона (не только до или после основного шаблона - это делается путем добавления @parent в дочернем шаблоне - но между ними):
main.blade.php
@include('child')
<div>
...
@yield('child')
</div>
child.blade.php
@section('child')
<div>
...
</div>
@endsection
Ответ 6
У меня была такая же проблема.
Вы не можете использовать опцию @extends в этом случае, вам нужно использовать @include.
Допустим, у вас есть:
- корневой макет (layouts/app.blade.php)
- дополнительный макет (layouts/extra.blade.php)
- фактическое представление, которое вы вызываете (someview.blade.php)
Решение состоит в том, чтобы добавить/унаследовать корневой макет (1) в верхней строке вашего представления (3):
@extends('layouts.app')
Затем добавьте/унаследуйте дополнительный макет (2) во второй строке вашего представления, НО используйте @include, а не @extends:
@include('layouts.extra')
... и не забудьте обернуть содержимое дополнительного макета в имя @section, например @section ('extra')
Наконец, вы можете вызвать дополнительный контент макета из своего представления:
<p>Look below, you will see my extra content...</p>
@yield('extra')
Итак, в итоге ваш вид someview.blade.php будет выглядеть следующим образом:
@extends('layouts.app')
@include('layouts.extra')
@section('content')
<p>Look below, you will see my extra content...</p>
@yield('extra')
@endsection