Компонент
com_categories позволяет другим расширениям хранить информацию о древовидных структурах в своих таблицах и управлять данными через свой функционал. Примеры использования можно посмотреть, например, в коде компонента com_banners.
Если количество категорий не большое, то использование
com_categories - самый простой и удобный способ управления древовидными структурами.
Но com_categories использует для хранения древовидных структур комбинацию из трех методик: Список смежных вершин (
Adjacency List) + Вложенные множества (
Nested Set) + Материализованные пути (
Materialized Path).
Каждая из этих методик дает свои преимущества при выборке данных. Например, Materialized Path позволяет строить красивые пути URL типа
/category_lev1_1/category_lev2_2/.Но как раз из-за использования метода Materialized Path любые операции с деревом - вставка, перемещение, удаление,
приводит к полной рекурсивной перестройке дерева.
При количестве категорий или других древовидных элементов несколько тысяч
перестройка занимает недопустимо много времени (минуты).
Если отказаться от использования материализованных путей, то можно в своем компоненте класс таблицы расширить от JTableNested и переопределить некоторые методы класса с учетом требований методик "Смежных вершин" и "Вложенных множеств".
Перемещение элементов в методе "вложенных множеств" тоже не самая простая задача т.к. требует рассмотрения всех возможных вариантов перемещений "вправо-влево", "вверх-вниз" по дереву.
Но используемый для пересортировки плагин jQuery сокращает возможные варианты перемещений. Перемещение "вправо-влево" доступно только на одном уровне в режиме списка категорий, перемещение по уровням доступно только из режима редактирования элемента при этом переносимый элемент всегда занимает самую правую позицию на выбранном уровне.
В итоге требуется переопределить единственный метод
saveorder() из класса
JTableNested и метод
saveorder() из класса
JModelAdmin. Этого будет достаточно, чтобы получить действующую модель работы с древовидными структурами.
Один из лучших циклов статей по вложенным структурам в реляционных базах данных Сергея Томулевича
http://doc.prototypes.ru/database/