Создание модулей и динамических обработчиков
Автор: o.s.a.
- Определение модуля и группы модулей
- Создание модуля
- Создание динамического обработчика
- Создание группы модулей
Определение модуля и группы модулей
Что такой модуль?
Модуль - это интерфейс в админ. панели для управления данными (создания/ редактирования/удаления). Каждый модуль управляет минимум одной таблицей в БД.
В Irokez 0.8 существуют так называемые группы модулей, т.е. модули, объединенные какой-либо логической связью.
В стартовой сборке Irokez 0.8 имеются 4 группы модулей:
- Sestions (разделы);
- Groups (группы);
- Files (файлы);
- Templates (шаблоны).
В разделах мы можем: управлять собственно разделами, а также новостями и галереей.
Как же новости и галерея относятся к разделам?
При создании новости или добавлении изображения в модуль галереи в соответствующих таблицах в БД устанавливается связь с разделом, к которому относятся данная новость или изображение.
Т.е. для того, чтобы разместить на сайте новости, нужно:
- Создать раздел, в котором в качестве обработчика (handler) указать скрипт новостей (news);
- В дереве разделов слева кликнуть на только что созданный раздел. Т.о. мы окажемся как бы внутри раздела. С точки зрения связей - это означает, что любой раздел, новость или изображение, созданные тут, будут относиться именно к этому разделу.
На странице новостей на сайте будет выводиться только новости (т.к. обработчиком мы указали news), причем только те, которые относятся именно к этому разделу.
Создание модуля
Допустим, мы хотим создать сайт для какой-либо фирмы, и ей нужен каталог для ее товаров. Товары наверняка будет делиться на разделы по каким-либо критериям. Например, у фирмы по продаже сотовых телефонов будут разделы: nokia, sony ericsson, lg и др.
Для того, чтобы создать каталог нужно:
- Создать раздел "каталог товаров" (допустим текстовый раздел, в котором будет список телефонных брендов);
- Создать разделы брендов (у этих разделов в качестве обработчика выберем "products" - скрипт для вывода товаров, который мы в будущем напишем);
- Внутри каждого из брендов создать соответствующие товары (телефоны).
Но, чтобы добавлять товары, нужно сначала создать модуль товаров с привязкой к разделам.
Теперь приступим к собственно программированию.
Для того, чтобы создать новый модуль, нужно:
- Создать таблицу (-ы) в БД;
- Создать модель (класс для работы с таблицей БД);
- Добавить модуль продуктов в API разделов;
- Создать шаблон для формы добавления товаров в админ. панели;
1. Создание таблицы в БД
В зависимости от того, является модуль многоязычным или нет, создаются 1 или 2 таблицы. Допустим, нам нужен каталог товаров на нескольких языках, тогда создаем 2 таблицы: products и products_trans.
Таблица products будет иметь след. поля:
- id - int(11) auto_increment primary
- section - int(11)
- cost - varchar(32)
Таблица products_trans будет иметь след. поля:
- item - int(11)
- language - int(11)
- title - varchar(32)
- description - text
В данном случае поля title и description являются переводимыми. Поле item служит для связи с главной таблицей (products), а поле language определяет язык.
Если бы модуль был одноязычным, то поля title и description нужно было бы просто поместить в таблицу products. А таблица products_trans вообще бы не потребовалась.
2. Создание модели
Модели создаются в /include/irokez/Model/. Создадим модель и назовем ее Products.php.
Чтобы не печать заново текст, можно скопировать его из модели Users.php.
Изменяем название класса и параметр в конструкторе, который является названием главной таблицы нашего модуля.
3 Добавление модуля в API
Добавляем наш модуль в API, чтобы правильно принимались ajax-овые запросы (вся админ. панель работает на ajax-е).
Открываем /handlers/static/api/sections/controller.php, подключаем модель
Framework::import('irokez.Model.Products');и добавляем модуль
$this->addModule(new ProductsModule, array('parent' => 'section'));4. Создание шаблона для формы в админ. панели
Создаем шаблон для формы в /handlers/static/admin/sections/templates/.
Например, можно скопировать news.tmpl, переименовать в product.tmpl и подправить верстку (названия полей, порядок вывода и т.д.)
Шаблон подключаем в методе handleGetJsFile в контроллере.
$this->T->include_template('this.templates.product');Описываем модуль в controller.js
После строк
sections: {
container: 'parent',
title: 'title',
form: {$section|output::js_html}
},
news: {
container: 'section',
title: 'title',
form: {$news|output::js_html}
},
gallery: {
container: 'section',
title: 'title',
form: {$gallery|output::js_html}
}
добавляем,
products: {
container: 'section',
title: 'title',
form: {$product|output::js_html}
}
Также в стилях (controller.css) можно описать конкретно для модуля: иконку, размеры окна и т.д.
Создание динамического обработчика
Создадим динамический обработчик для вывода товаров. Для этого в /handlers/dynamic/ создаем директорию products. Для упрощения можно скопировать все файлы из /handlers/dynamic/news/. И заменить все упоминания о news на products (название модели, поля и др.) в контроллере, а также исправить все шаблоны.