- •Что в этой книге
- •Настройки против Расширений
- •Как расширить Joomla!
- •Компоненты (Components)
- •Модули (Modules)
- •Плагины (Plug-Ins)
- •Обзор тем
- •Создание пи (Toolbars) и Списков
- •Поддержание стиля и исключение повторений кода используя html функции
- •Доступ к бд и управление записями
- •Безопасность и предпочтительный способ получения переменных запроса
- •Меню управления
- •Управления логикой работы внутри Компонента
- •Конфигурация посредством xml-параметров
- •Упаковка и распространение
- •Наш Проект для примера
- •Приступая к разработке Компонента
- •Структура Компонента Joomla!
- •Запуск Компонента
- •Разделение на иа и ип в Joomla
- •Регистрация Компонента в бд
- •Создание пи
- •Доступные кнопки пи
- •Создание таблицы бд
- •Создание класса Table
- •Создание формы Обзора
- •Обработка данных
- •Создание Списка
- •Редактирование записей
- •Удаление записей
- •Разработка ип
- •Листинг Обзоров
- •Отображение Обзора
- •Генерация дружественных для поисковиков ссылок
- •Создание url сегментов
- •Парсинг url сегментов
- •Добавление комментариев
- •Отображение комментариев
- •Разработка Модуля
- •Регистрация Модуля в бд
- •Создание и настройка базового Модуля
- •Воспользуемся некоторыми помощниками (class Helper)
- •Пробуем различные стили
- •Попробуем смешать
- •Расширяем проект
- •Модель, Вид, Контроллер: Почему?
- •Построение Модели данных
- •Модель Все Обзоры
- •Модель одиночного Обзора
- •Миграция на Виды
- •Переключения посредством Контроллеров (Controllers)
- •Обновление связей и маршрутов
- •Реорганизация кода иа
- •Управление публикацией Обзоров
- •Добавление постраничной навигации
- •Управление Коментариями
- •Дополнительные пи
- •За кулисами: Плагины (Plug-Ins)
- •Запросы к бд
- •Плагин ссылка
- •Плагин справочной информации
- •Поиск Обзоров
- •Параметры
- •Добавление параметров к расширениям
- •Параметры для Модулей
- •Параметры для Плагинов
- •Параметры для Компонентов
- •Упаковываем все вместе
- •Список всех файлов
- •Упаковка Модуля
- •Упаковка Плагина
- •Упаковка Компонента
- •Включение sql-запросов
- •Создание пунктов меню иа
- •Дополнительные сценарии установки
- •Распространение
- •Содержание
Создание и настройка базового Модуля
Модули являются одновременно простыми и гибкими. Вы можете создать Модуль, который просто выводит статический текст или который запросит удаленную БД о такой вещи, как погода.
Вы, конечно можете создавать Модули любой сложности, однако их лучше всего использовать для отображения данных и простых форм. Обычно Модуль не используют для записи или комплексного управления сессиями, вы можете сделать это через Компонент или Плагин.
Чтобы создать Модуль для наших Обзоров, мы должны создать каталог mod_reviews в /modules. Мы также должны создать файл mod_reviews.php внутри mod_reviews.
Для начала создадим основной Модуль, который отображает ссылки на самые последние Обзоры. В файле mod_reviews.php, добавьте следующий код:
<?php
defined('_JEXEC') or die('Restricted access');
$items = $params->get('items', 1);
$db =& JFactory::getDBO();
$query = "SELECT id, name FROM #__reviews WHERE
published = '1' ORDER BY review_date DESC";
$db->setQuery( $query, 0, $items );
$rows = $db->loadObjectList();
foreach($rows as $row)
{
echo '<a href="' . JRoute::_('index.php?option=com_reviews&id='
. $row->id . '&task=view') . '">' . $row->name .
'</a><br />';
}
?>
После сохранения и обновления страницы, ваш Модуль должен выглядеть так:
Когда Модуль загружен, подгружается объект $params. Его можно использовать для получения и установки параметров. Когда мы добавили строку в jos_modules, столбец params содержит три значения: одно для items (значение 3), еще одно для style (установлено в simple), и одно для random (значение 1). Загрузим в $items параметр items с помощью функции get(), по умолчанию 1 (если значение не существует)
При желании, вы можете использовать функцию set($name, $value), чтобы отменить или добавить параметр для Модуля.
После получения ссылки на объект БД, мы пишем запрос, чтобы выбрать id и name из jos_reviews и обратном хронологическому порядке от даты опубликования. Мы используем второй и третий параметры setQuery() для генерации LIMIT, который автоматически добавляется в запрос. Это гарантирует правильное использование синтаксиса для каждого типа БД. После того как запрос будет создан, мы получаем все соответствующие строки из БД, и проходя через них обеспечиваем каждый Обзор соответствующей ссылкой
Воспользуемся некоторыми помощниками (class Helper)
Мы хотели бы, чтобы наш Модуль делал больше, чем просто показывал ссылки на Обзоры. Было бы полезно включить резюме Обзора вместе с каждой ссылкой или возможность отображения Обзора в случайном порядке. Однако, в данный момент создано недостаточно для построения кода эффективно обрабатывающего различные сценарии. Чтобы это исправить, мы централизуем необходимые функции во вспомогательный класс helper. Создайте файл helper.php в /modules/mod_reviews и добавьте следующий код:
<?php
defined('_JEXEC') or die('Restricted access');
class modReviewsHelper
{
function getReviews(&$params)
{
$items = $params->get('items', 1);
$db =& JFactory::getDBO();
$query = "SELECT id, name, quicktake FROM #__reviews
WHERE published = '1' ORDER BY review_date DESC";
$db->setQuery( $query, 0, $items );
$rows = $db->loadObjectList();
return $rows;
}
function renderReview(&$review, &$params)
{
$link = JRoute::_
("index.php?option=com_reviews&task=view&id=" .
$review->id);
require(JModuleHelper::getLayoutPath ('mod_reviews', '_review'));
}
}
?>
Функция getReviews() выполняет те же действия с БД, что и оригинальный Модуль, но она возвращает строки вместо того, чтобы проходить через них. Таким образом, мы отделяем функциональные возможности БД от логики отображения. Столбец quicktake был добавлен в запрос, чтобы собрать необходимое для отображения расширенного формата Обзора
Мы собираемся использовать renderReview() для вывода одного Обзора. Чтобы создать ссылку на Обзор, вставим
index.php?option=com_reviews&task=view&id= и id Обзора в JRoute::_() для создания SEF URL. Наконец, мы используем require() и JModuleHelper функцию getLayoutPath() чтобы включить шаблон _review который мы сейчас и собираемся создать