Шрифт:
Класс контроллера, производный от JController, содержит методы для каждой задачи, которую должен выполнять компонент. Метод JController::display, который вызывается по умолчанию, вызывает методы getView, getModel, а также метод display заданного представления.
В классе представления, производном от JView, может быть перегружен метод display для вызова метода класса модели для загрузки данных и сохранения результата в какой-либо переменной. Затем с помощью метода JView::assignRef эта переменная связывается с текущим представлением и вызывается метод базового класса JView::display, который загружает файл заданного шаблона при помощи перехвата выходного потока.
В коде шаблона осуществляется вывод на экран переменных текущего представления.
Вопросы
Какие классы Joomla позволяют реализовать элементы архитектуры MVC?
Опишите схему взаимодействия модели, представления и контроллера.
Что такое регистрация задачи?
Упражнения
Адаптируйте код из раздела " Практика" для своего варианта (см. список вариантов в дополнительных материалах).
Модули. Постраничный вывод информации. Навигационная цепочка
Рассмотрен практический пример создания модуля. Рассмотрены классы для постраничного вывода списка элементов и для управления навигационной цепочкой.
Цель лекции:Понять принцип разработки модулей. Ознакомиться с методами классов JPagination и JPathway.
Модули
Как уже говорилось, модули в Joomla используются для отображения небольших фрагментов контента, обычно в левой или правой колонке или верхней или нижней областях страницы. Типичный модуль выводит информацию из таблицы какого-нибудь компонента, например, случайную фотографию или несколько последних статей.
По сравнению с разработкой компонента написать модуль значительно легче. Как правило, модуль не использует собственных таблиц и не обрабатывает данные, введенные пользователем. Код модуля может даже поместиться в одном-единственном файле.
Постраничный вывод информации (класс JPagination)
Joomla позволяет разбивать длинные списки на страницы, задавая длину списка по умолчанию ( "Сайт" - "Общие настройки", выпадающий список "Длина списка по умолчанию"). Для вывода списков элементов с разбивкой на страницы как в бэкенде, и так и во фронтенде используется класс JPagination. Его открытые (public) поля хранят следующую информацию:
total - общее количество записей; limitstart - порядковый номер записи, с которой нужно начать вывод; limit - количество записей на страницу; prefix - префикс переменных запроса.
Соответственно, конструктор принимает эти четыре значения в качестве параметров:
__construct(int $total, int $limitstart, int $limit, string $prefix = '')
Например:
$paginationObject = new JPagination(100, 20, 10, 'somePrefix');
Как вы, возможно, помните, второй и третий параметры метода JDatabase::setQuery - это смещение для начала выборки и количество выбираемых строк. Они в точности соответствуют параметрам limitstart и limit. Поэтому используйте одни и те же значения для создания объекта JPagination и для задания параметров setQuery:
$db->setQuery("SELECT * FROM #__mycomponent", $limitstart, $limit); $rows = $db->loadObjectList; jimport('joomla.html.pagination'); $paginationObject = new JPagination($total, $limitstart, $limit);
После создания объекта JPagination необходимо вызвать один из его методов для отображения счетчика страниц, ссылки на предыдущую/следующую страницу и т.д. Все эти методы не имеют параметров и возвращают HTML-код соответствующих элементов. Для наглядности посмотрите на результаты работы этих методов (таблица 7.1).
Таблица 7.1. Методы класса JPagination Метод РезультатgetPagesCounter
Рис. 7.1. Результат работы метода getPagesCounter getResultsCounter
Рис. 7.2. Результат работы метода getResultCounter getPagesLinks
Рис. 7.3. Результат работы метода getPagesLinks getListFooter
Рис. 7.4. Результат работы метода getListFooter getLimitBox
Рис. 7.5. Результат работы метода getLimitBox
Например:
echo $paginationObject->getListFooter;
Также класс JPagination содержит методы orderUpIcon и orderDownIcon для вывода стрелок "вверх" и "вниз", использующихся для задания собственного порядка записей.
Управление навигационной цепочкой (класс JPathway)