Литмир - Электронная Библиотека
Содержание  
A
A

Ключевые термины

JController - абстрактный класс для реализации контроллеров. JModel - абстрактный класс для реализации моделей. JView - абстрактный класс для реализации представлений. Регистрация задачи - сопоставление ее какому-либо методу класса, производного от JController.

Краткие итоги

Joomla поддерживает архитектуру MVC для компонентов. Модели, представления и контроллеры реализуются соответственно с помощью абстрактных классов JModel, JView и JController. В компоненте могут быть созданы классы, производные от всех или некоторых из этих классов.

Вот простейшая схема взаимодействия модели, представления и контроллера.

В файле, который находится в корневой папке компонента и называется так же, как компонент, находится код для создания контроллера и вызова его методов execute() и redirect(). Метод execute() вызывает метод контроллера, который называется так же, как и заданная задача.

Класс контроллера, производный от 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()

Разрботка расширений для CMS Joomla - _47.jpg

Рис. 7.1.  Результат работы метода getPagesCounter() getResultsCounter()

Разрботка расширений для CMS Joomla - _48.jpg

Рис. 7.2.  Результат работы метода getResultCounter() getPagesLinks()

Разрботка расширений для CMS Joomla - _49.jpg

Рис. 7.3.  Результат работы метода getPagesLinks() getListFooter()

Разрботка расширений для CMS Joomla - _50.jpg

Рис. 7.4.  Результат работы метода getListFooter() getLimitBox()

Разрботка расширений для CMS Joomla - _51.jpg

Рис. 7.5.  Результат работы метода getLimitBox()

Например:

echo $paginationObject->getListFooter();

Также класс JPagination содержит методы orderUpIcon() и orderDownIcon() для вывода стрелок "вверх" и "вниз", использующихся для задания собственного порядка записей.

Управление навигационной цепочкой (класс JPathway)

Навигационная цепочка("хлебные крошки") - это последовательность элементов, представляющая собой путь по сайту от корня до текущей страницы. Для управления навигационной цепочкой в Joomla существует объект JPathway, доступ к которому можно получить так:

global $app; $pathway =& $app->getPathway();

Добавление элемента в навигационную цепочку

bool addItem(string $name, string $link='')

где

$name - название (текст) элемента; $link - гиперссылка.

Например:

$pathway->addItem('Категория #1','mycomponent/category/1'); $pathway->addItem('Элемент #1');

Получившаяся цепочка показана на рис. 7.6.

Разрботка расширений для CMS Joomla - _52.jpg

Рис. 7.6.  Навигационная цепочка

Обратите внимание, что для элемента, который окажется в цепочке последним, ссылка выводиться не будет, даже если она задана. Это понятно, т.к. последний элемент соответствует текущей странице, ссылка на которую и без того известна. Тем не менее, такая ссылка не теряется и сохраняется в массиве _pathway, в котором класс JPathway хранит элементы цепочки как объекты с двумя полями - name и link.

Получение массива элементов навигационной цепочки

array getPathway()

Для приведенного выше примера массив выглядит так:

Array ([0]=>stdClass Object ([name]=>Категория #1 [link]=>mycomponent/category/1) [1]=>stdClass Object ([name]=>Элемент #1 [link]=>))

Получение только названий элементов без ссылок

array getPathwayNames()

Для того же примера этот метод вернет массив

Array ([0]=>[1]=>Категория #1 [2]=>Элемент #1)

Изменение названия заданного элемента

bool setItemName(int $id, string $name)

где

$id - индекс элемента; $name - новое название.

29
{"b":"145279","o":1}