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

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


limb3_2007_4:ru:tutorials:basic:step5

Шаг5. Финальные штрихи (сортировка, отображение новости целиком, пять свежих новостей на главной странице)

Сортировка новостей при отображении

Тег <active_record:fetch> шаблонизатора поддерживает установку порядка сортировки записей прямо из шаблона, например:

<active_record:fetch using='src/model/News' target='news' navigator='pager' order='date=DESC'/>

Есть еще один способ задания сортировки - это изменить класс News:

class News extends lmbActiveRecord
{
  protected $_default_sort_params = array('date' => 'DESC');
}

Атрибут класс lmbActiveRecord :: $_default_sort_params позволяет указать параметры сортировки, которые будут применяться по-умолчанию, если не указаны другие параметры. Если бы мы указали в шаблоне другие параметры сортировки, тогда значение $_default_sort_params будет игнорироваться.

Новости на главной странице

Знание способа установки сортировки позволит нам вывести последние несколько новостей на главной странице.

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

<core:WRAP file="page.html" in="page_placeholder">
 
<h1>Main page</h1>
 
<active_record:fetch using='src/model/News' target="last_news" order='date=DESC' limit='3'/>
 
<list:LIST id="last_news">
  <list:ITEM>
  <table>
  <tr>
    <td>{$date}</td>
    <td>{$title}</td>
  </tr>
  <tr>
    <td colspan='2'>{$annotation}
    <route_url params='controller:news,action:detail,id:{$id}'>more...</route_url>
    </td>
  </tr>
  </table>
  <hr/>
  </list:ITEM>
  <route_url params='controller:news'>all news...</route_url>
</list:LIST>
 
</core:wrap>

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

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

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

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

Теперь осталось только добавить контроллер главной страницы src/controller/MainPageController.class.php:

<?php
lmb_require('limb/web_app/src/controller/lmbController.class.php');
 
class MainPageController extends lmbController
{
 
}
?>

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

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

<core:WRAP file="page.html" in="page_placeholder">
 
<active_record:fetch using='src/model/News' target="current_news" first="true">
  <fetch:params record_id='{$#request.id}'/>
</active_record:fetch>
 
<core:DATASOURCE id='current_news'>
 
<h1>{$title}</h1>
 
<b>Date</b> : {$date}<br/>
 
{$content|raw}
 
</core:DATASOURCE>
 
</core:wrap>

Обратите внимание на атрибут first тега <active_record:fetch>, который указывает что необходимо получить не список объектов, а только один объект. В качестве контейнера данных, который будет принимать загруженный объект новости выступает тег <core:datasource>.

При помощи тега <fetch:params> мы задаем дополнительные параметры для тега <active_record:fetch>, в частности, указываем идентификатор записи, который необходимо загрузить.

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

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

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

Что дальше?

Обсуждение

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