Blade - (Sage 9), когда несколько секций @ yield / @ - PullRequest
0 голосов
/ 08 мая 2019

Мы новички в фреймворке sage9 / Blade и пытаемся создать шаблонную логику с ACF. С 1 блоком все работало хорошо, но когда мы добавили больше блоков, первый 1 эхосигнал повторялся 2-3 раза.

Вот как мы это сделали:

Мы используем по умолчанию layouts.app из sage9:

web/app/themes/[theme-name]/resources/views/layouts/app.blade.php

...
    <div class="vy_main uk-offcanvas-content">
      <header>
        @yield('dispatch_banner') 
      </header>
      <div class="wrap container" role="document">
        <div class="content">
          <main class="main">
            @yield('dispatch') //The one we currently working on
          </main>
...

В макете мы называем @yield('dispatch'). Внутри page.blade.php мы расширяем макеты и добавляем раздел отправки.

web/app/themes/[theme-name]/resources/views/page.blade.php

@extends('layouts.app')

@section('dispatch_banner')
  @layouts('banners')
      {!! App::banners() !!} 
  @endlayouts
@endsection


@section('dispatch')
  @layouts('sections')
      {!! App::sections() !!} //This call a controller where we can select the correct section to display.
  @endlayouts
@endsection

Внутри контроллера, web/app/themes/[theme-name]/app/Controllers/App.php мы возвращаем шаблон для использования и передаваем конфигурации / переменные для использования. :

public static function sections(){
 ...
   $return .= \App\template('sections.'.$sections, $config);
  }

  return $return;
 ...
}

Мы создаем стандартный блок. Этот блок включает в себя диспетчер:

web/app/themes/[theme-name]/resources/views/sections/std.blade.php

Внутри этого шаблона мы создали новую «основу» макетов, поскольку все разделы будут иметь одинаковую базовую структуру, мы расширяем эту базу внутри шаблона и помещаем в нее содержимое раздела следующим образом:

web/app/themes/[theme-name]/resources/views/sections/std.blade.php

@extends('layouts.base')

@section('section-content')
  @if ($image)
    <div class="uk-grid uk-flex-middle" data-uk-grid>
      <div class="{!! $class_image !!}">
          <img src="{!! $image['url'] !!}" alt="{!! $image['alt'] !!}">
      </div>
      <div class="{!! $class_content !!}">
  @endif 
      <div class="{!! $content_class_content !!}">
          @layouts('content')
            {!! App::content() !!}
          @endlayouts
      </div>

  @if ($image)  
      </div>
    </div>
  @endif 
@endsection

А вот макет web/app/themes/[theme-name]/resources/views/layouts/base.blade.php

<section {{ (( $section_id )?'id='.$section_id:'') }} class="{!! $class_section !!}">

  @if($has_container)
    <div class="uk-container uk-container-{!! $container !!}" data-uk-scrollspy="cls: uk-animation-fade;"> 
      @yield('section-content')
    </div>
  @else 
    @yield('section-content')
  @endif

</section>

Как я уже сказал, все работало нормально с 1 блоком, но как только мы добавили второй блок, данные просто повторяли НО только @yield('section-content') от базы, переменные используют внутри макета не повторяются.

Вот что мы имеем в html:

<section {{ (( $section_id )?'id='.$section_id:'') }} class="{!! $class_section !!}">

Получаем:

<section class="uk-section vy_std uk-section-primary uk-section-xlarge">
<section class="uk-section vy_accordion uk-section-transparant">
<section class="uk-section vy_std uk-section-transparant">

Где проблема с нашей логикой, и мы повторяем содержимое @yield('section-content') вместо того, чтобы использовать правильные данные, отправляемые с контроллера?

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

Спасибо за ваше время!

1 Ответ

0 голосов
/ 08 мая 2019

Мне удается решить эту проблему, используя компоненты / слоты вместо макетов. Теперь я получаю базу от такого компонента:

@component('layouts.base', $config)
  /*Section code*/
@endcomponent

И все снова работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...