Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Читал туториалы про использование @section и @yield. Но так и не понял как можно сделать довольно стандартную вещь. Предположим у нас есть новостной сайт. Как заместить блок content мне понятно, он будет меняться в зависимости от контроллера и его layout.
Но как сделать так, чтобы у нас на сайте были независимые блоки, например, последних новостей, активных авторов статей. Неужели в каждом контроллере мне надо каждый раз делать отдельные выборки для этих вот данных и замещать ими соответствующие переменные в шаблоне.
Или еще хуже - прямо в шаблоне вызывать методы получения последних новостей/авторов и отрисовывать их.
Есть ли какое-либо стандартное решение?
Не в сети
Что понимается под независимостью блоков? Можно использовать разные методы, например, для определённых шаблонов устанавливать составителей, которые будут добавлять к нему нужные переменные. Можно написать какой-то общий метод, получающий блок (новости и т.п.), а в шаблоне передавать переменную как PHP$view->$blockType = getBlock($blockType)
.
Не в сети
Это контроллер:
class Home_Controller extends Base_Controller {
public $restful = true;
public function get_index()
{
return View::make('home.mainpage');
}
}
Сделал composer и поместил его в routes.php
View::composer('home.mainpage', function($view) {
$view->nest('ooo', 'home.test');
});
В шаблоне home.mainpage написал
...
{{ $ooo }}
...
В шаблоне home.test собственно то, что надо подставлять.
Это работает. Но возникает вопрос. Мне вот надо в этом блоке вывести последние N записей из таблицы. По терминологии Joomla это называется "модуль". Куда по-православному лучше положить логику выборки записей? В Joomla это был отдельный файл и все такое. Неужели это надо запихивать в routes.php? Можно ли сподобить на это дело отдельный контроллер и вызвать его из routes.php?
Не в сети
- Можно ли сподобить на это дело отдельный контроллер и вызвать его из routes.php?
Так а что вам мешает указать функцию обратного вызова, а не замыкание?
View::composer('home.mainpage', array('Home_Controller', 'add_variables'));
И пусть add_variables() добавляет любые переменные. Единственное отличие от такого же кода в routes.php — то, что он находится в отдельном классе контроллера.
Либо если вам нужно не просто переменную добавить, а именно вызывать функцию и делать это нужно в отдельных шаблонах по разному — возможно тут лучше будет сделать «настоящую» функцию, которая будет вызываться из кода шаблона.
Не в сети
Страницы 1