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.
|