Когда имеем дело с небольшим ветвистым каталогом, и возникает необходимость переделать структуру секций, хочется сконцентрироваться на самой структуре чтобы не отвлекаться на инструменты. Мощные и, порой, громоздкие инструменты административной части не всегда дают такую возможность. Тогда начинают возникать различные идеи, даже такие (Элементы инфоблока как файлы).
[spoiler]
Прошлый раз такой подход мне помог переделать FAQ. Теперь возникла задача переделать мастер создания обращения в техподдержку, потребовались новые инструменты
Итак, есть небольшая иерархическая структура секций в инфоблоке. Надо представить их визуально с возможностью легко редактировать и менять структуру.
Вывел стандартные иконки, которые позволяют удалять, добавлять подраздел, менять существующий. Для просты реализации и скорости это работает через стандартное окно js, сохраняется через AJAX. Ненавижу долгие загрузки и перегрузки страниц
Для перемещения раздела напрашивается использовать модную и красивую технологию "drug & drop", но слишком накладно в плане написания кода. А хочется чтобы можно было ткнуть "сюда" и "тут" была эта секция. Сделал это так: сначала нажимаем на название раздела который хотим перенести, потом на тот, куда хотим перенести. После этого делается AJAX запрос, который обновляет записи в базе и в случае успеха возвращает скрипт, который меняет визуальную структуру на странице. Перезагрузки страницы не происходит. Изначально я думал представить структуру в таблицах (как бабушка учила ), но тогда визуальное перестроение структуры представляется не тривиальной задачей.
Выкрутился очень просто: каждая секция лежит в div c padding'ом слева, подсекции в этом div и т.д. Фактически визуальная вложенность такая же, как в базе данных. А это значит, что всё перекроение структуры делает браузер, для переноса секции мне лишь надо выполнить код JS:
Курсор у меня принтскриниться не хочет, пришлось его нарисовать Вот что получилось после клика:
Всё вроде бы ничего, но чего-то не хватает... хочется вывести элементы. Но здесь возникает проблема: каждый элемент может находиться в нескольких секциях одновременно, надо все их выбрать и показать. Мне пришлось поступить антирелигиозно: одним прямым запросом выбрал все элементы с привязками ко всем разделам. Но грех мой был бы ещё больше, если бы для каждого элемента делал дополнительный запрос к базе через АПИ. Для тех, кто захочет использовать решение (к слову сказать, оформлено в виде компонента) и не боится грехопадения, сделал параметр компонента, который выводит все элементы инфоблока (надо понимать, что компонент не будет очень хорошо работать с инфоблоками, где 100 тыс. элементов )
Даже почти сделал визуальное перемещение элементов, но опять же привязка к нескольким секциям изрядно усложняет не только код, но и инструменты для визуального управления. Посему, сделал отображение стандартной формы редактирования элемента по нажатию на имя (теперь уже с обновлением всей страницы). В этой форме можно сделать все привязки.
Архив компонента можно скачать с сайта. Помещаем в /bitrix/components/custom, подключаем
Компонент содержит языковые фразы в кодировке UTF-8. Делал и проверял исключительно в FireFox 3.6. Работоспособность в других браузерах не гарантируется.
Кому может быть интересно
- разработчикам чтобы быстро набросать каталог товаров, faq и т.д.; - контент-менеджерам для повседневной работы с небольшими каталогами; - можно легко переделать в шаблон отображения дерева со сворачиванием разделов;
Если тема интересная, пишите, постараюсь сделать более универсальное решение.
Отличный инструмент! Респект и вечная уважуха автору! Было бы здорово развить этот компонент до должного уровня и добавить в поставку, ибо вещь на самом деле полезная. Немного дёгтя Не смог переместить раздел из другого раздела в корень, но это не отменяет других достоинств.
Месяцев 6 назад делал аналогичную задачу только без drug & drop и ajax от последнего оказался уже не помню почему, навероное была какая-то проблема с изменением свойств разделов или элементов. Работало это все под админкой, наверное в ближайшее свободное время опишу его в своем блоге.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».