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.

Допустим, у вас есть:

  1. корневой макет (layouts/app.blade.php)
  2. дополнительный макет (layouts/extra.blade.php)
  3. фактическое представление, которое вы вызываете (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