Авторизация на сайте

 

Использование JoiAdmin - для управления данными ( 2 серия про написание расширения )

Дата начала публикации: 15.03.2010
JoiAdmin представляет собой библиотеку построения административных интерфейсов. Проще говоря - позволяет быстро создать админку для компонента. При этом админка будет уметь:
  • выводить список записей
  • создавать новую запись
  • редактировать существующую запись
  • удалять запись

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

Делать будем панель управления для небольшого компонента видео.
Начать стоит с создания структуры таблицы в базе данных и описания модели работы с этой базой.
Каждое видео у нас будет иметь:
- Название
- Описание
- Код плеера, это тот который предлагает скопировать YouTube, небольшой набор HTML тэгов
- Категория видео, категорий у нас будет немного: Личное, Общее и Разное.

Все эти сущности представляют собой набор полей в базе данных, в каждом из которых будут находиться своё значений. Давайте перенесём это в более понятный предмет для нашей базы данных:
- Название, поле не очень длинное, 250 символов хватит через край. Выберем для поля тип varchar длиной в 250 символов
- Описание может быть как небольшим, так и просто громадным. Перестрахуемся и выберем тип поля - text.
- Код плеера тоже поле не совсем однозначное, тип text.
- Категорию видео лучше записывать числом, это позволить в дальнейшем добавлять и менять названия категорий, в общем прозапас.
Помимо обозначенных полей добавим еще одно поле - ID, это поле с уникальным числом по которому можно будет однозначно идентифицировать наше видео. Тип поля для ID - integer длина - 11 символов. Названия полей сделаем более-менее понятными, у меня получилось так:

CREATE TABLE IF NOT EXISTS `jos_video` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(250) NOT NULL,
  `description` text NOT NULL,
  `html_code` text NOT NULL,
  `catid` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Теперь опишем это же, но уже в понятиях Joostina. для этого сначала создадим необходимую файловую структуру проекта ( смотреть  1ю серию руководства по по разработке компонентов ). Теперь в файле модели сделаем описание нашего класса видео:

class Video extends mosDBTable {
    public $id;
    public $title;
    public $description;
    public $html_code;
    public $catid;

    function  __construct() {
        $this->mosDBTable('jos_video','id');
    }
}


Video - это название нашего класса, без лишнего пафоса - просто Видео.
extends mosDBTable - обозначает что класс будет иметь все возможности по работе с базой данных mosDBTable. mosDBTable вообще представляет собой некую прослойку для представления записей в базе данных в виде объектов php, и все манипуляции с данными осуществляются через манипуляции с созданным объектом. В Joostina вообще вся работа с базой данных построена на таких объектах, большие люди иногда называют такой подход - ORM ( википедия расскажет подробнее что это такое ).
public $id; $title; $description; $html_code; $catid; - это те самые поля которые мы создали в нашей табличке видео, и в которых будут храниться данные по нашим видеофайлам. Такие элементы называются свойствами класса. Сколько в таблице полей - столько должно быть и свойств у созданного класса.

Табличку создали, модель данных в табличке описали, теперь надо создать функции для управления всем этим богатством. Перейдём в файл admin.video.php. Нам как минимум нужны будут функции:
- вывода списка видео
- создание нового видео
- редактирование существующего видео
- удаление видео

В этом процессе создание и редактирование - это по своей сути одинаковое действие, но в первом случае форма будет пустой, а во втором - форма будет уже заполнена данными из редактируемой записи. Поэтому функция будет для этих действий единая.

Создадим функции для выполнения всех обозначенных задач.

// для вывода списка видео
function index(){
    
}

// для редактирования и создания видео

function editVideo(){
    
}

// для сохранения созданного или отредактированного видео

function saveVideo(){
    
}

// для удаления видео

function deleteVideo(){
    
}


editVideo - должно выводить форму редактирования видео, пустую для нового видео или заполненную для редактирования.
saveVideo - функция должна получать данные из формы и сохранять их в базе, или заменять если производится редактирование видео.
deleteVideo - собственно для удаления.

Всё сделали, радуемся.

Теперь немного отвлекёмся от нажатия на кнопки и подумаем что из всего этого и в каких местах нам надо увидеть.
Функция index - тут выводится список нашего видео, скорее всего нам потребуется ID и название видео. При этом название видео должно быть ссылкой ведущей на редактирование этого видео. В редактировании нужны все поля, название - однострочное текстовое поле, описание - поле с визуальным редактором, код плеера - многострочное текстовое поле, категория - выпадающий список.

Теперь собственно в дело вступается joiadmin, которым если ему толком рассказать - сделает всё в высшем свете и полных красках.
joiadmin собирает интерфейс на основе полей нашей таблицы, т.е. на свойствах объекта базы данных отвечающих за конкретную таблицу. Но библиотеке надо рассказать в каком виде и какой последовательности выводить элементы.
joiadmin хороший, и не беспокоит модель без надобности, и данные о интерфейсе будет искать только в функции get_fieldinfo(), которая должна находиться как раз в нашем класса-объекте Video. Т.е. как-то так:

    public function get_fieldinfo() {
        return array(
            'id' => array(
                'name' => 'ID',
                'editable' => false,
                'sortable' => false,
                'in_admintable' => true,
                'width' => '20px',
            ),
            'title' => array(
                'name' => 'Название видео',
                'editable' => true,
                'sortable' => true,
                'in_admintable' => true,
                'html_edit_element' => 'edit',
                'html_table_element' => 'editlink',
            ),
            'description' => array(
                'name' => 'Описание видео',
                'editable' => true,
                'sortable' => true,
                'in_admintable' => true,
                'editlink' => true,
                'html_edit_element' => 'text_area_wysiwyg',
                'html_edit_element_param' => array(
                    'height' => 10,
                )
            ),
            'html_code' => array(
                'name' => 'Код плеера',
                'editable' => true,
                'html_edit_element' => 'text_area',
            ),
            'catid' => array(
                'name' => 'Категория видео',
                'editable' => true,
                'sortable' => true,
                'in_admintable' => true,
                'html_edit_element' => 'option',
                'html_edit_element_param' => array(
                    'options' => array(
                        0 => 'Личное',
                        1 => 'Общее',
                        2 => 'Разное',
                    )
                ),
            ),
        );
    }

Что значит этот громадный страшный массив - пока не спрашивайте, сам боюсь, но описание что и за что отвечает обязательно сделаю в ближайших сериях, пока просто доверьтесь.

Так же наша модель Video должна иметь функцию get_tableinfo, которая будет подсказывать библиотеке joiadmin какие названия давать страницам списка и редактирования видео. Опять же под мою ответственность:
    public function get_tableinfo() {
        return array(
            'header_list' => 'Видео',
            'header_new' => 'Создание видео',
            'header_edit' => 'Редактирование видео'
        );
    }


Собственно всё, осталось собрать всё воедино и возрадоваться.
Созданное расширение можно скачать в виде архива , или из общего svn расширений . Часть имеющихся функций в расширении не указана в статье, они носят более общий смысл и разобраться в них - домашнее задание.

Для работы всего указанного безобразия потребуется использование всех расширенных бибилиотек , а так же Joostina 1.3.1 SVN не ниже r606.

Добавить комментарий


Защитный код
код с картинки (Обновить)