Компонент
Настало время посмотреть, что же у нас представляет собой компонент.
Компонент выполняет роль диспетчера, он будет обрабатывать действия, которые вы
ему определите, вызывая те или иные методы разных классов.
Разумеется, ваша реализация компонента может быть полностью отлична от моей я
приведу вам лишь иллюстрирующие примеры, поскольку целью данной статьи не
является написание какого-то рабочего приложения.
Давайте предположим, что наш компонент выводит новости на главную страницу.
Новостей там может быть не более 5 за раз.
В шаблоне напишем так:
{component name='news' action='view' count=5 tpl='news_mainpage.tpl'}
Параметр name указывает на нужный нам компонент, action обозначает действие,
которое требуется совершить, count – это фильтр количества новостей, и tpl –
название шаблона, который будет использован для формирования вывода новостей на
экран.
Теперь давайте посмотрим, как мог бы выглядеть наш компонент:
<?php
// News component
//
// @author Feskov Kuzma
// Подключаем необходимый нам класс
// и создаем объект
require_once(CLASSES_DIR . '/news.class.php');
$news = new News($adodb);
// Обрабатываем возможные действия
switch ($params['action']) {
// --- View news ---
case 'view':
// Получаем 5 последних новостей
$data = $news->NewsList($params['count']);
if (false === $data) {
// Выводим ошибку
$errors->ComponentErrPrint('Компонент news, действие ' . $params
['action'], $news->ERROR);
}
// Проверяем - есть ли такой шаблон
if(is_file(TEMPLATES . '/' . $params['tpl'])) {
// Выводим новости на экран
$smarty->assign('data', $data);
$smarty->display($params['tpl']);
} else {
// Выводим ошибку
$errors->ComponentErrPrint('Компонент news, действие ' . $params
['action'], 'Шаблон не найден');
}
break;
// --- Default action ---
default:
// Если никакого действия не задали, выводим ошибку
$errors->ComponentErrPrint('news_view', 'Неизвестное действие');
break;
}
?>
Этот пример показывает упрощенную схему работы компонента. Вы вполне можете ее
развить и изменить под свои нужды.
Количество действий, которые может выполнить компонент ограничено лишь вашей
фантазией, ровно как и количество и названия параметров, которые вы можете
передать из шаблона в компонент.