Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Множественное расширение шаблона » 10.03.2016 20:53:51

Спасибо за ответ!
Насчет нарушения логики согласен, потому и хотелось сделать это все по-нормальному. В итоге создал отдельный layout, все данные собрал в контроллере, отдал их через return layout'у, а уже в нем все динамические данные раскидал по блокам. Я так понимаю, это самый верный способ.

#2 Laravel 5.x » Множественное расширение шаблона » 04.03.2016 14:46:37

Mescaline
Ответов: 2

Доброго времени суток!
Имеется шапка сайта с динамическим содержимым. При запросе URL идет запрос к нескольким таблицам и результаты передаются в разные шаблоны. В итоге работу контроллера можно сокращенно представить сейчас так:

echo View('panel.header'); //открываем все div 
//помещаем в них шаблоны
echo View('panel.header_top', ['data' => $data] );
echo View('panel.layouts.system', ['data' => $data]);
echo View('panel.layouts.profile', ['data' => $data]);
//закрываем div
echo View('panel.header_bottom');

Переменная $data содержит разный набор данных, которые в последствии подставляются в шаблоны.
Вид у этой конструкции меня не устраивает, хотелось бы сделать по-нормальному, но что-то не выходит.
Что пробовал:
Создал шаблон layouts, который содержал html-код с файлов panel.header и panel.header_bottom, а между ними добавил секции @yield('') для каждого из трех шаблонов. В шаблонах прописал @extends('panel.layout') и привел контроллер к виду:

echo View('panel.header_top', ['data' => $data] );
echo View('panel.layouts.system', ['data' => $data]);
echo View('panel.layouts.profile', ['data' => $data]);

*это упрощенный вид, на деле это делается в цикле и шаблонов несколько больше

Однако в этом случае на каждый вывод View в контроллере будет подключаться весь код layout, не распределенный по секциям, т.е. самый верхний шаблон подключается (расширяется) трижды. В итоге это приводит к дублированию div и, как итог - искажению верстки.

Собственно вопрос - как можно вызывать несколько разных шаблонов, передав им разные данные, при этом чтобы код всех этих шаблонов просто "добавился" в прописанные секции yield, не дублируя при этом расширяемый шаблон?
Заранее благодарен за помощь.

#3 Re: Веб-разработка » Несколько расширяющих шаблонов в Blade? » 22.01.2016 09:34:22

duster пишет:

Если оба блока на одной странице - это должен быть один шаблон, а не два.

block_1 и block_2 могут быть partial шаблонами внутри одного шаблона, а не расширяющими шаблонами

К примеру есть страница на сайте - главная, создаем шаблон glavnaya.blade.php вроде:

@extends('layouts.index')
@section('content')
@include('partials.block_1')
....
@include('partials.block_2')
@endsection

Не понял про 3 return подряд - это реально в коде так? smile

Спасибо за ответ! С шаблонами разобрался, include мне не помог, т.к. там в шаблоны передаются данные от контроллера. Ну и плюс ко всему с версткой были проблемы, т.к. некоторые div в результате таких вот манипуляций просто задваивались sad
return реально 3 штуки подряд были, но самое смешное, что я не сразу понял это. Тяжело дается мне чтение чужого кода. Просто нужно больше практики и грабель smile

#4 Веб-разработка » Несколько расширяющих шаблонов в Blade? » 21.01.2016 13:21:04

Mescaline
Ответов: 2

Доброго времени суток!
Почитал доки, в которых сказано, что при использовании наследования, шаблоны "собираются" по цепочке, снизу вверх. И немного не могу понять одну вещь:
К примеру, есть у меня страница index.blade.php:

@yield('header')
@yield('content')
@yield('footer')

Секция "content" вставляется из файла, в котором задано:

@extends('layouts.index')
@section('content')
@yield('block_1')
....
@yield('block_2')
@stop

В свою очередь, в этот файл данные подставляются из других файлов (для block_1 и block_2 заданы отдельные файлы *.blade.php), которые содержат:

@extends('layouts.content')
@section('block_1')
...
@stop

и для block_2 соответственно подобный файл.

Вызывается это все через контроллер, при этом в block_1 и block_2 передаются различные данные:

return View::make('layouts.content');
return View::make('layouts.block_1', ['data' => $data1]);
return View::make('layouts.block_2', ['data' => $data2]);

Но вот какая проблема - шаблон создается только 1 раз с данными из первой строки, т.е. секция block_2 на сайте остается пустой. Каким образом можно в основной "скелет" передать данные в разные обозначенные секции одновременно?

Извиняюсь, если излагаю мысли не понятно, просто 3-ий день пытаюсь это реализовать, но что-то голова совсем ничего не понимает sad

Подвал раздела