- •Что в этой книге
- •Настройки против Расширений
- •Как расширить Joomla!
- •Компоненты (Components)
- •Модули (Modules)
- •Плагины (Plug-Ins)
- •Обзор тем
- •Создание пи (Toolbars) и Списков
- •Поддержание стиля и исключение повторений кода используя html функции
- •Доступ к бд и управление записями
- •Безопасность и предпочтительный способ получения переменных запроса
- •Меню управления
- •Управления логикой работы внутри Компонента
- •Конфигурация посредством xml-параметров
- •Упаковка и распространение
- •Наш Проект для примера
- •Приступая к разработке Компонента
- •Структура Компонента Joomla!
- •Запуск Компонента
- •Разделение на иа и ип в Joomla
- •Регистрация Компонента в бд
- •Создание пи
- •Доступные кнопки пи
- •Создание таблицы бд
- •Создание класса Table
- •Создание формы Обзора
- •Обработка данных
- •Создание Списка
- •Редактирование записей
- •Удаление записей
- •Разработка ип
- •Листинг Обзоров
- •Отображение Обзора
- •Генерация дружественных для поисковиков ссылок
- •Создание url сегментов
- •Парсинг url сегментов
- •Добавление комментариев
- •Отображение комментариев
- •Разработка Модуля
- •Регистрация Модуля в бд
- •Создание и настройка базового Модуля
- •Воспользуемся некоторыми помощниками (class Helper)
- •Пробуем различные стили
- •Попробуем смешать
- •Расширяем проект
- •Модель, Вид, Контроллер: Почему?
- •Построение Модели данных
- •Модель Все Обзоры
- •Модель одиночного Обзора
- •Миграция на Виды
- •Переключения посредством Контроллеров (Controllers)
- •Обновление связей и маршрутов
- •Реорганизация кода иа
- •Управление публикацией Обзоров
- •Добавление постраничной навигации
- •Управление Коментариями
- •Дополнительные пи
- •За кулисами: Плагины (Plug-Ins)
- •Запросы к бд
- •Плагин ссылка
- •Плагин справочной информации
- •Поиск Обзоров
- •Параметры
- •Добавление параметров к расширениям
- •Параметры для Модулей
- •Параметры для Плагинов
- •Параметры для Компонентов
- •Упаковываем все вместе
- •Список всех файлов
- •Упаковка Модуля
- •Упаковка Плагина
- •Упаковка Компонента
- •Включение sql-запросов
- •Создание пунктов меню иа
- •Дополнительные сценарии установки
- •Распространение
- •Содержание
Модель, Вид, Контроллер: Почему?
Пока что в нашем Компоненте хорошо отделяется выходной HTML-код от всего остального, что позволяет относительно просто вернуться назад и, к примеру, изменить стиль. Мы и дальше будем работать в этом направлении и сделаем его еще более гибким. Вместо текущего плоского списка для показа Обзоров, мы могли бы создать представления (Виды), которые позволили бы выводить столбцы с различной степенью детализации. Такие варианты могли бы быть доступны администраторам, которые могли бы выбрать нужный режим [Вид, Отображение. прим.переводчика].
Для этого мы будем изменять Компоненты для соответствия их архитектуре Модель, Вид, Контроллер (Model, View, Controller - MVC). Многие программисты используют MVC как предсказуемый способ управления логикой в программном обеспечении.
Модели используются для выбора различных вариантов доступа к данным.
Виды - генерируют отображение полученных данных.
Контроллеры получают команды и направляют (переключают) программное обеспечение для соответствующих задач и Видов
В нашей реализации MVC, мы будем создавать модели данных для представления информации из БД, Виды для отображения наших данных и Контроллеры, которые будут объединять их (Модели и Виды) и обрабатывать любые другие задачи
Построение Модели данных
Прежде чем разделить Виды, мы должны построить несколько моделей данных, которые будут получать информацию которую мы будем показывать. Часть Компонента в ИП состоит из двух основных Видов: тот, что отображает все Обзоры и тот, что отображает один Обзор. Им обоим понадобится, по крайней мере, одна модель
Модель Все Обзоры
В каталоге /components/com_reviews, создайте папку с именем models. В этой папке создайте файл all.php и добавьте в него такой код:
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.model' );
class ModelReviewsAll extends JModel
{
var $_reviews = null;
function getList()
{
if(!$this->_reviews)
{
$query = "SELECT * FROM #__reviews WHERE published = '1'";
$this->_reviews = $this->_getList($query, 0, 0);
}
return $this->_reviews;
}
}
?>
Во-первых, мы импортируем библиотеки модели данных Joomla!. Далее, мы объявляем ModelReviewsAll как расширение JModel. Обратите внимание на название: Model, затем имя Компонента, за которым следует название модели. Следуя такому соглашению, облегчается ссылка на эту модель для других Компонентов. Мы объявляем переменную $_reviews внутри класса, нижнее подчеркивание напоминает нам, что это защищенная переменная. Единственная функция GetList() проверяет загружен ли список Обзоров. Если нет, мы строим запрос, чтобы получить все опубликованные Обзоры и отправить их через JModel функцию _getList(). Как только в $_reviews загружаются строки, мы возвращаем ее
Почему второй и третий параметры _getList() установлены в 0?
Второй и третий параметры для _getList() это начальная строка и их количество (limit). Если бы мы хотели получить строки с 20 по 50, то установили бы второй и третий параметры в 20 и 30 соответственно. В противном случае, _getList() интерпретирует два нуля, как получить все строки.