Разработка фото галереи — джаваскриптовое дерево

Я начинаю серию статей, в которых последовательно опишу процесс создания фотогалереи. Эту галерею я написал для одного из проектов.

Задача

Разработать галерею с неограниченной вложенностью в категориях. Категории должны поддерживать локализацию (русский и английский языки). Должна быть панель администратора. Все что можно, реализовать с помощью Аякс.

Начало разработки

В самом начале я получил, штмл верстку галереи. Не идеально, но концепция понятна. шаблон За прототип дерева было взято цсс дерево из техногрета Артемия Лебедева. . Недостатоки того дерева: поддерживает только один уровень вложенности, в ИЕ плохо выглядит. Уже вырисовывается первая задача.

Создание дерева

Я подумываю об использовании дерева из библиотеки ext.js. Но решаю не внедрять библиотеку в этот проект. В проекте использую только prototype.js library.

Задача: Создать дерево с неограниченной вложенностью. Должно позволять добавлять, удалять и редактировать узлы.

Задача ясна. Первое что решаю сделать, добавить в дерево поддержку ИЕ и научить неограниченной вложенности. Делаю это, используя просто штмл и цсс. До динамики еще время дойдет. В итоге получаю такой вид дерева. Из рисунка видно что начальный вариант несколько изменился. дерево Штмл такого вида:

Вырисовывается задача с помощью джаваскрипта создать тоже самое.

На вход нужно давать данные. Выбор формата очевиден.

JSON, лучше в JS нет!

Ручками создаем данные. С помощью этих данных будет отображено дерево категорий.

Итак, можно заняться наконец рендерингом дерева.

Рендеринг дерева

Задача: с помощью джаваскрипта отрендерить дерево. На вход будут поступать джейсон данные, на выходе получится штмл.

В объектной структуре особо нечего выдумывать, классы те же что и везде (класс дерева и класс узла):

Tree – содержит в себе ноды, рисует дерево итд.

TreeNode – реализация логики узла.

Из полезного, метод удаления выбраного нода (deleteSelectedNode), добавление нода (appendNode), добавление нода в дети текущего узла (appendNodeToSelected).

Код нода не показываю тут, так как его много. В ноде реализованы методы редактирующие его отображение и данные.

А также код удаления:

В завершении

Задача выполнена, дерево отображается в ИЕ и ФФ; позволяет добавлять удалять и редактировать ноды; содержит удобное АПИ для работы.

Пример посмотреть можно здесь.

Скачать пример здесь.

В следующей части я напишу серверную часть, которая будет отображать дерево.

English verison of article



Комментарии

  1. Февраль 8th, 2008 | 11:32 пп
  2. Кигорв
    Август 31st, 2008 | 10:20 дп

    В фф 3 пример уже не очень корректно работает.

  3. Кигорв
    Август 31st, 2008 | 10:21 дп

    продолжение цикла не писал, так как с выходом АСП.НЕТ МВЦ не захотелось писать про велосипеды

Оставь комментарий