В предыдущих статьях, мы рассмотрели теорию хранения и управления древовидных структур данных, а так же реализовали Perl модуль для облегчения управления ими. Теперь напишем небольшой скрипт упраления (администрирования). Идея скрипта проста - требуется легко и непринужденно, с помощью скрипта, управлять деревом каталогов.
Возьмем стандартную таблицу в которой будет хранится наше дерево каталогов, в ней мы будем хранить только одно дерево, реализацию принципа работы, при котором количество деревьев неограничено, я рассмотрю в следующих статьях. Итак, наша таблица:
Конечно, количество дополнительных полей (одно из них - name) может быть неограничено.
Концепция
Для начала определим, какие функции должен выполнять наш скрипт:
создание узла;
редактирование узла (с возможностью изменения подчиненности);
удаление узла;
перемещение узла на уровень вверх;
перемещение узла на уровень вниз;
перемещение узла на порядок вверх (в пределах подчиненности);
перемещение узла на порядок вниз (в пределах подчиеннности);
Ограничение доступа - вообще не учитывал, то есть авторизация скрипта, проверка доступа - просто отсутсвуют. Оставлю это на Вашей совести. А вообще, проще всего, просто запаролировать директирию скрипта .htaccess и все...
HTML шаблон*, я все-таки вынес из скрипта - терпеть не могу править HTML в скрипте, и Вам того не советую. Шаблон состоит из трех частей:
верхняя часть (header.html) - заголовки и прочая до момента вывода списка категорий (начало таблицы);
строка списка категорий (row.html) - одна строка таблицы списка категорий;
нижняя часть (footer.html) - конец таблицы вывода списка категорий, форма создания, редактирования категории;
* Эта структура шаблонов была придумана "на ходу", поэтому не будем заострять внимание на её правильности, не это важно.
HTML-код шаблонов:
header.html
row.html
footer.html
Вот так, если эти три файла сложить в один, как есть, то получится одна страница с таблицей в центре состоящей из одной строки.
Теперь поясню отдельные моменты:
В первом файле включен JavaSript, так как форма редактирования и создания одна, то при нажатии на ссылку "изменить" нужно внести соответствующие данные в форму. По кнопке "Вернуть" формы, требуется очистить форму от данных редактируемого узла;
текст заключенный в квадратные скобки и знак доллара ([$текст$]), то что будет динамически заменяться нашим скриптом, где:
[$id$] - идентификатор узла;
[$name$] - поле name узла, или имя узла;
[$prefix$] - отступ на который смещается имя узла (зависит от уровня узла);
[$par$] - порядковый номер родительского узла в select формы редактирования (не путать с id родительского узла!);
[$ac$] - случайный набор символов, я буду использовать текущее время (против кеширования страниц);
Код скрипта
Для начала определим где какие файлы у нас будут лежать:
cgi-bin/admin_tree/
lib/
MP/
NestedSets.pm
template/
header.html
row.html
footer.html
admin.pl
Что за файл NestedSets.pm, я думаю, объяснять не нужно (это модуль описанный в предыдущих статьях), с .html файлами - тоже понятно, остался только один файл - admin.pl, его мы как раз и опишем. Итак, код скрипта:
Вот собственно и все. Как видно, никаких сложностей нет, сам скрипт размером менее чем сто строк благодаря использованию модуля. Конечно, нужно еще проверить данные формы, может быть, некоторые операции...