====== Шаг5. Финальные штрихи (подключение моделей, сортировка, отображение новости целиком, две свежие новости на главной странице) ====== ===== Подключение моделей в setup.php ===== Подключать модели в каждом контроллере довольно утомительно, поэтому для удобства можно вынести подключение в файл setup.php. Допишем в конец файла следующую строку: lmb_require('src/model/*.class.php'); Как вы уже наверное догадались, функция lmb_require поддерживает glob-синтаксис, т.е. наш пример подключил все файлы, заканчивающиеся на .class.php в папке src/model. ===== Сортировка новостей при отображении ===== Чтобы изменить сортировку выборки, нужно задать параметр sort массивом сортируемых полей, например: $last_news = lmbActiveRecord::find('News', array('sort' => array('date' => 'DESC'))); Есть еще один способ задания сортировки - это изменить класс News: class News extends lmbActiveRecord { protected $_default_sort_params = array('date' => 'DESC'); } Атрибут класс lmbActiveRecord :: $_default_sort_params позволяет указать параметры сортировки, которые будут применяться по-умолчанию, если не указаны другие параметры. Если бы мы указали в шаблоне другие параметры сортировки, тогда значение $_default_sort_params будет игнорироваться. ===== Новости на главной странице ===== Иногда бывает удобно вытащить нужные данные прямо в шаблоне, без создания лишнего контроллера. Для сколько-нибудь сложных действий, MACRO поддерживает прямые php-вставки, разделяемые привычными тегами . Знание способа установки сортировки позволит нам легко вывести на главной странице последние несколько новостей. Для этого создадим в папке template/main_page/ шаблон display.phtml следующего содержания: {{wrap with="page.phtml" into="page_placeholder"}}

Main page

2, 'sort' => array('date' => 'DESC'))); ?> {{list using="$last_news" as="$item"}} {{list:item}}
{$item.date} {$item.title}
{$annotation} more...

{{/list:item}} all news... {{/list}} {{/wrap}}
Обратите внимание на новый параметр **limit**. При помощи этого атрибута, а также **offset**, где это необходимо, можно указывать ограничения на размер выборки объектов из базы данных. На главной странице мы будем выводить только 2 самые свежие новости. При помощи строки more... мы вывели ссылки на страницы с подробным описание новости. Шаблон работает и без создания контроллера! ===== Страница детального описания новости ===== Для создания страницы детального описания новости нам необходимо будет создать еще один шаблон template/news/detail.phtml: {{wrap with="page.phtml" into="page_placeholder"}} request->id); ?>

{$current_news.title}

Date : {$current_news.date}
{$current_news.content|raw} {{/wrap}}
Обратите внимание на метод findById, он используется для выборки модели по первичному ключу, соответственно, возвращается не список объектов, а только один объект. Значение идентификатора объекта новости мы берем из глобального контейнера (объект $this) данных шаблона, в котором по умолчанию в переменной request находится все данные, что пришли в запросе к приложению. Также надо сделать возможность детального просмотра на странице списка всех новостей, для этого подкорректируем шаблон template/news/display.html: [...] {$item.annotation} more... [...] ===== Что дальше? ===== * [[.step6|Шаг6. Создание RSS-feed новостной ленты]] - покажет как работать с шаблонизатором напрямую без помощи тега * [[.step7|Шаг7. Рекомендации по дальнейшему изучению]] - дает список разделов, к изучению которых можно приступать после выполнения данного руководства.