Создание модулей и динамических обработчиков

Автор: o.s.a.

  1. Определение модуля и группы модулей
  2. Создание модуля
  3. Создание динамического обработчика
  4. Создание группы модулей

Определение модуля и группы модулей

Что такой модуль?

Модуль - это интерфейс в админ. панели для управления данными (создания/ редактирования/удаления). Каждый модуль управляет минимум одной таблицей в БД.

В Irokez 0.8 существуют так называемые группы модулей, т.е. модули, объединенные какой-либо логической связью.

В стартовой сборке Irokez 0.8 имеются 4 группы модулей:

  1. Sestions (разделы);
  2. Groups (группы);
  3. Files (файлы);
  4. Templates (шаблоны).

В разделах мы можем: управлять собственно разделами, а также новостями и галереей.

Как же новости и галерея относятся к разделам?

При создании новости или добавлении изображения в модуль галереи в соответствующих таблицах в БД устанавливается связь с разделом, к которому относятся данная новость или изображение.

Т.е. для того, чтобы разместить на сайте новости, нужно:

  1. Создать раздел, в котором в качестве обработчика (handler) указать скрипт новостей (news);
  2. В дереве разделов слева кликнуть на только что созданный раздел. Т.о. мы окажемся как бы внутри раздела. С точки зрения связей - это означает, что любой раздел, новость или изображение, созданные тут, будут относиться именно к этому разделу.

На странице новостей на сайте будет выводиться только новости (т.к. обработчиком мы указали news), причем только те, которые относятся именно к этому разделу.

Создание модуля

Допустим, мы хотим создать сайт для какой-либо фирмы, и ей нужен каталог для ее товаров. Товары наверняка будет делиться на разделы по каким-либо критериям. Например, у фирмы по продаже сотовых телефонов будут разделы: nokia, sony ericsson, lg и др.

Для того, чтобы создать каталог нужно:

  1. Создать раздел "каталог товаров" (допустим текстовый раздел, в котором будет список телефонных брендов);
  2. Создать разделы брендов (у этих разделов в качестве обработчика выберем "products" - скрипт для вывода товаров, который мы в будущем напишем);
  3. Внутри каждого из брендов создать соответствующие товары (телефоны).

Но, чтобы добавлять товары, нужно сначала создать модуль товаров с привязкой к разделам.

Теперь приступим к собственно программированию.

Для того, чтобы создать новый модуль, нужно:

  1. Создать таблицу (-ы) в БД;
  2. Создать модель (класс для работы с таблицей БД);
  3. Добавить модуль продуктов в API разделов;
  4. Создать шаблон для формы добавления товаров в админ. панели;

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 (название модели, поля и др.) в контроллере, а также исправить все шаблоны.

Создание группы модулей


Tags: how-to module handler