Инструменты пользователя

Инструменты сайта


limb3:ru:tutorials:basic:step5

Шаг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-вставки, разделяемые привычными тегами <?php ?>. Знание способа установки сортировки позволит нам легко вывести на главной странице последние несколько новостей.

Для этого создадим в папке template/main_page/ шаблон display.phtml следующего содержания:

{{wrap with="page.phtml" into="page_placeholder"}}
 
<h1>Main page</h1>
 
<?php
 
$last_news = lmbActiveRecord::find('News', array('limit' => 2, 'sort' => array('date' => 'DESC')));
 
?>
 
{{list using="$last_news" as="$item"}}
  {{list:item}}
  <table>
  <tr>
    <td>{$item.date}</td>
    <td>{$item.title}</td>
  </tr>
  <tr>
    <td colspan='2'>{$annotation}
    <a href="{{route_url params='controller:news,action:detail,id:{$item.id}'}}">more...</a>
    </td>
  </tr>
  </table>
  <hr/>
  {{/list:item}}
  <a href="{{route_url params='controller:news'}}">all news...</a>
{{/list}}
 
{{/wrap}}

Обратите внимание на новый параметр limit. При помощи этого атрибута, а также offset, где это необходимо, можно указывать ограничения на размер выборки объектов из базы данных. На главной странице мы будем выводить только 2 самые свежие новости.

При помощи строки

  <a href="{{route_url params='controller:news,action:detail,id:{$item.id}'}}">more...</a>

мы вывели ссылки на страницы с подробным описание новости.

Шаблон работает и без создания контроллера!

Страница детального описания новости

Для создания страницы детального описания новости нам необходимо будет создать еще один шаблон template/news/detail.phtml:

{{wrap with="page.phtml" into="page_placeholder"}}
 
<?php
$current_news = lmbActiveRecord::findById('News', (int) $this->request->id);
 
?>
 
<h1>{$current_news.title}</h1>
 
<b>Date</b> : {$current_news.date}<br/>
 
{$current_news.content|raw}
 
{{/wrap}}

Обратите внимание на метод findById, он используется для выборки модели по первичному ключу, соответственно, возвращается не список объектов, а только один объект. Значение идентификатора объекта новости мы берем из глобального контейнера (объект $this) данных шаблона, в котором по умолчанию в переменной request находится все данные, что пришли в запросе к приложению.

Также надо сделать возможность детального просмотра на странице списка всех новостей, для этого подкорректируем шаблон template/news/display.html:

  [...]
  <tr>
    <td colspan='4'>
      {$item.annotation}
      <a href="{{route_url params='controller:news,action:detail,id:{$item.id}'}}">more...</a>
    </td>
  </tr>
  [...]

Что дальше?

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
  _   __  _      __     __   ___   ____ 
 | | / / | | /| / / __ / /  / _ \ / __ \
 | |/ /  | |/ |/ / / // /  / // // /_/ /
 |___/   |__/|__/  \___/  /____/ \____/
 
limb3/ru/tutorials/basic/step5.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)