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

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


limb3_2007_3:ru:tutorials:basic:step2

Шаг2. Вывод новостей через шаблон

Создание таблицы в базе данных и заполнение ее данными

Нам необходимо создать пустую базу данных с именем, которые вы указали в файле settings/db.conf.php. Пусть это будет limb_crud. Нам необходимо будет внести в базу данных всего одну таблицу для хранения списка новостей.

Вот SQL-код:

CREATE TABLE `news` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL DEFAULT '',
  `annotation` text NOT NULL,
  `content` longtext NOT NULL,
  `date` DATE NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY  (`id`),
  KEY `date` (`date`)
) TYPE=MyISAM;

Теперь заполним нашу таблицу тестовыми данными. Например, такими:

INSERT INTO `news` VALUES (3,'We finished model part','Model is finished.','Model is finished. And more text here!','2006-08-15');
INSERT INTO `news` VALUES (4,'We finished view partfds','All templates are ready!','We created display.html, detail_display.html, create.html, edit.html, admin_display.html','2006-08-16');
INSERT INTO `news` VALUES (5,'Controller is finished','Controller is ready now!','The most difficult part was to describe controller!','2006-08-17');
INSERT INTO `news` VALUES (6,'Basic tutorial is finished and ready to be published','All pages are ready as well as php-code. Now it\'s time to rock\'n\'roll!','','2006-08-18');

Данный sql-код можно найти в файле examples/crud/init/db.mysql. (для SQLite соответственно - examples/crud/init/db.sqlite)

Создание класса для работы с таблицей

Создайте папку src/model в приложении и поместите туда файл News.class.php со следующим содержимым:

<?php
lmb_require('limb/active_record/src/lmbActiveRecord.class.php');
 
class News extends lmbActiveRecord
{
}
?>

Класс lmbActiveRecord является реализацией паттерна ActiveRecord, суть которого заключается в следующем: существует класс, который является контейнером данных и отвечает за запись и считывание этих данных из определенной таблицы базы данных; при необходимости в этот класс добавляется функциональность по обработке этих данных.

Класс lmbActiveRecord располагается в пакете ACTIVE_RECORD.

Класс News автоматически по своему имени определит, что ему нужно работать с таблицей news.

Создание контроллера для новостей

Для того, чтобы нам начать работать с лентой новостей, нам нужно создать контроллер новостей. Термин контроллер - можно трактовать по-разному, однако в нашем случае - это класс, который знает, что нужно делать при запросах пользователя к определенному функционалу, например, при запросах к ленте новостей.

Создайте папку src/controller и поместите туда файл NewsController.class.php со следующим содержимым:

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

Создание шаблона для вывода списка новостей

Создайте папку template/news и поместите в нее файл display.html со следующим содержимым:

<html>
<head>
  <title>Newsline</title>
  <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
</head>
<body>
<h1>Newsline.</h1>
</body>
</html>

Теперь наберите в браузере путь http://%tutorial_address%/news и вы должны увидеть страницу с надписью Newsline. Если это так, то все работает как надо и мы продолжаем.

Теперь мы выведем список новостей. Для этого необходимо модифицировать наш шаблон следующим образом:

<html>
<head>
  <title>Newsline</title>
  <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
</head>
<body>
<h1>Newsline.</h1>
 
<active_record:fetch using='src/model/News' target="news" />
 
<list:LIST id="news">
  <table border="1">
  <tr>
    <th>ID</th>
    <th>Date</th>
    <th>Title</th>
  </tr>
  <list:ITEM>
  <tr>
    <td>{$id}</td>
    <td>{$date}</td>
    <td>{$title}</td>
  </tr>
  <tr>
    <td colspan='3'>
      {$annotation}
    </td>
  </tr>
  </list:ITEM>
  </table>
</list:LIST>
</body>
</html>

Limb по умолчанию использует шаблонную систему WACT.

Основными элементами WACT-шаблона являются теги и выражения. Кратко поясним, какие элементы шаблонной системы здесь использовались:

  • <active_record:fetch> тег используется для получения данных при помощи класса, указанного в атрибуте using (это наш класс News) и эти данные передаются в компонент, указанный в атрибуте target. В нашем случае в тег <list:list> с идентификатором news передается весь список новостей.
  • <list:LIST> является тегом цикла и используется для отображения различных списков. Та часть, которая заключена в рамки <list:ITEM> тега повторяется для каждой записи.
  • При помощи выражений {$date}, {$title}, {$annotation} выводятся значения полей каждой новости.

В результате мы должны получить на странице /news нечто подобное:

:limb3:ru:tutorials:basic:simple_list.png}

WACT - очень мощный, расширяемый и быстрый шаблонный движок. Ему посвящен отдельный раздел "Использование шаблонной системы WACT". Мы рекомендуем вам ознакомиться с содержимым этого раздела после выполнения этого примера.

Вы можете немного отвлечься в этом месте и прочитать следующие страницы про WACT:

Или же Вы можете продолжить выполнение примера и почитать про WACT позднее.

Каким образом отработал шаблон news/display.html

Класс NewsController отнаследован от класса lmbController. При обращению по адресу /news, приложение автоматически определяет, что необходимо активизировать контроллер news с действием по-умолчанию. Если бы действие было указано, тогда оно шло бы вторым элементом адреса страницы, например, /news/create. По-умолчанию действие равно display. lmbController ищет у себя метод doActionName, например, doDisplay и запускает его, если находит. Если же такого метода нет, тогда lmbController пытается найти шаблон в папке с относительным именем controller_name/action_name.html, а в нашем случае это news/display.html, и если его находит - вызывает на отображение, что и произошло. Если же одновременно нужного метода нет и шаблон не найден - отображается 404 ошибка.

Что дальше?

Обсуждение

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