Использование JoiAdmin - для управления данными ( 2 серия про написание расширения )
- выводить список записей
- создавать новую запись
- редактировать существующую запись
- удалять запись
Управление библиотекой осуществляется через
настройки модели. Расписывать что и как работает скучно и не интересно,
расскажу сразу на примере.
Делать будем панель управления для
небольшого компонента видео.
Начать стоит с создания структуры
таблицы в базе данных и описания модели работы с этой базой.
Каждое
видео у нас будет иметь:
- Название
- Описание
- Код плеера,
это тот который предлагает скопировать 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.
« Вариант переезда с Joostina 1.2.0 на 1.3.0 | Создание компонентов Joostina 1.3, 1 серия » |
---|
Категории
- Joostina 1.2.0 ( 1 )
- Joostina 1.3.0 ( 20 )
- Фишки ( 1 )
- Расширения ( 3 )
- Советы ( 13 )
- Процесс ( 3 )
- Обо всём ( 9 )
- Форум для Joostina ( 2 )
- Разработка YaForms ( 3 )
- Книга «Реактивные веб-сайты» ( 3 )
Комментарии
- JamesLet → Выпуск YarBB (компонент форума)
- AndrewCus → Вариант переезда с Joostina 1.2.0 на 1.3.0
- Josephlug → Вариант переезда с Joostina 1.2.0 на 1.3.0
- LouisNeaCy → Вариант переезда с Joostina 1.2.0 на 1.3.0
- Joanne → Работа с вкладками
- HaroldZes → Вариант переезда с Joostina 1.2.0 на 1.3.0
- Gary → Оптимизация через базовые настройки системы