В разделе "Первые папки и файлы. Добавление пунктов меню" предлагается создать две файла: - myquestions.php; - admin.myquestions.php с соответствуюшими адресами: - /components/com_myquestions/myquestions.php; - /administrator/components/com_myquestions/admin.myquestions.php; Так вот, при создании файла "admin.myquestions.php" В админке выдает ошибку - "Компонент не найден", а при переименовании его на "myquestions.php" в последующем шаге, в админке не выводятся кнопки редактирования. |
Модули. Постраничный вывод информации. Навигационная цепочка
Цель лекции: Понять принцип разработки модулей. Ознакомиться с методами классов 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).
Метод | Результат |
---|---|
getPagesCounter() | |
getResultsCounter() | |
getPagesLinks() | |
getListFooter() | |
getLimitBox() |
Например:
echo $paginationObject->getListFooter();
Также класс JPagination содержит методы orderUpIcon() и orderDownIcon() для вывода стрелок "вверх" и "вниз", использующихся для задания собственного порядка записей.
Управление навигационной цепочкой (класс JPathway)
Навигационная цепочка ("хлебные крошки") - это последовательность элементов, представляющая собой путь по сайту от корня до текущей страницы. Для управления навигационной цепочкой в Joomla существует объект JPathway, доступ к которому можно получить так:
global $app; $pathway =& $app->getPathway();
Добавление элемента в навигационную цепочку
bool addItem(string $name, string $link='')
где
Например:
$pathway->addItem('Категория #1','mycomponent/category/1'); $pathway->addItem('Элемент #1');
Получившаяся цепочка показана на рис. 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)
где
Пример:
$pathway->setItemName(0,'Категория #2');
Вид навигационной цепочки после выполнения этого кода показан на рис. 7.7.
Замена массива элементов навигационной цепочки
array setPathway(array $pathway)
где $pathway - новый массив объектов цепочки (т.е. для каждого элемента должны быть заданы поля name и link).
Метод возвращает предыдущее значение массива.
Например:
$item1->name = "item1"; $item1->link = "link1"; $item2->name = "item2"; $item2->link = "link2"; $item3->name = "item3"; $item3->link = ""; $items = array($item1, $item2, $item3); $pathway->setPathWay($items);
Получившаяся цепочка показана на рис. 7.8.