====== Шаг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 со следующим содержимым: Класс lmbActiveRecord является реализацией паттерна ActiveRecord, суть которого заключается в следующем: существует класс, который является контейнером данных и отвечает за запись и считывание этих данных из определенной таблицы базы данных; при необходимости в этот класс добавляется функциональность по обработке этих данных. Класс lmbActiveRecord располагается в [[limb3:ru:packages:active_record|пакете ACTIVE_RECORD]]. Класс News автоматически по своему имени определит, что ему нужно работать с таблицей news. ===== Создание контроллера для новостей ===== Для того, чтобы нам начать работать с лентой новостей, нам нужно создать контроллер новостей. Термин **контроллер** - можно трактовать по-разному, однако в нашем случае - это класс, который знает, что нужно делать при запросах пользователя к определенному функционалу, например, при запросах к ленте новостей. Создайте папку src/controller и поместите туда файл NewsController.class.php со следующим содержимым: ===== Создание шаблона для вывода списка новостей ===== Создайте папку template/news и поместите в нее файл display.html со следующим содержимым: Newsline

Newsline.

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

Newsline.

ID Date Title
{$id} {$date} {$title}
{$annotation}
Limb по умолчанию использует шаблонную систему WACT. Основными элементами WACT-шаблона являются [[limb3:ru:packages:wact:tags|теги]] и [[limb3:ru:packages:wact:expressions|выражения]]. Кратко поясним, какие элементы шаблонной системы здесь использовались: * [[limb3:ru:packages:wact:tags:lmb_fetch_tags:lmb_active_record_fetch_tag|]] тег используется для получения данных при помощи класса, указанного в атрибуте **using** (это наш класс News) и эти данные передаются в компонент, указанный в атрибуте **target**. В нашем случае в тег с идентификатором news передается весь список новостей. * [[limb3:ru:packages:wact:tags:list_tags:list_list_tag|]] является тегом цикла и используется для отображения различных списков. Та часть, которая заключена в рамки [[limb3:ru:packages:wact:tags:list_tags:list_item_tag|]] тега повторяется для каждой записи. * При помощи выражений {$date}, {$title}, {$annotation} выводятся значения полей каждой новости. В результате мы должны получить на странице /news нечто подобное: {{{:limb3:ru:tutorials:basic:simple_list.png|:limb3:ru:tutorials:basic:simple_list.png}}} WACT - очень мощный, расширяемый и быстрый шаблонный движок. Ему посвящен отдельный раздел [[limb3:ru:packages:wact|"Использование шаблонной системы WACT"]]. Мы рекомендуем вам ознакомиться с содержимым этого раздела после выполнения этого примера. Вы можете немного отвлечься в этом месте и прочитать следующие страницы про WACT: * [[limb3:ru:packages:wact:intro|"Введение в шаблонную систему WACT"]] - расскажет про основные элементы WACT-шаблонов. * [[limb3:ru:packages:wact:important_details|"Компиляция и выполнение шаблона. Активные компоненты шаблона. Дерево контейнеров данных."]] - описывает кратко механизм работы 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 ошибка. ===== Что дальше? ===== Далее: [[step3|Шаг3. Добавление форм для создания, редактирования новостей. Удаление новостей]]