Печеньки и Drupal: модуль Junk
На днях Drupal.org обогатился одним моим нехитрым модулем под названием "Junk". Назначение модуля - перехватывать удаляемые пользователями ноды и помещать их в "корзину", откуда модератор может удалить их с сайта уже по-настоящему. При этом помещенные в корзину ноды скрываются во всех отображениях на сайте, будь то Views или меню, а также к ним ограничивается доступ. Junk имеет интеграцию с CTools Page Manager, Rules, Panels и Views и является полностью готовым решением для описанных задач.
Реализованный функционал
- возможность поместить ноду в корзину с помощью ссылки "Delete" в локальном меню и кнопки "Move to junk" в режиме редактирования. Помещенные в корзину ноды не отображаются в листингах нод (есть также опция автоматически фильтровать во Views), и доступ обычных пользователей к ним запрещен;
- возможность восстановить ноду из корзины с помощью кнопки "Restore" на странице ноды и на странице управления корзиной - доступно лишь ролям с назначенными специальным правами;
- страница корзины, отображающая помещенные в неё ноды с кнопками восстановления и окончательного удаления;
- автоматический "сборщик мусора", который окончательно удаляет ноды из корзины, если их пребывание там превышает заданный период. Например, можно автоматически удалять ноды, находящиеся в корзине более недели.
- интеграция с Panels 3 через CTools Page Manager. Это стоило немало крови, зато Junk не рушит новые панели, в отличии от других подобных решений;
- интеграция с Views 2 - добавлены свои поля и фильтры;
- интеграция с Rules - предоставляется 2 события: одно для помещения ноды в корзину и одно для восстановления;
- опция, позволяющая анпаблишить ноды при помещении в корзину.
Немного об аналогах
На продакшн сайте у нас активно использовался модуль Trash, и в целом он справлялся с поставленной задачей до того момента, пока мы не обновили панели до третьей версии. И тут отображение сообществ и нод-панелей на всём сайте буквально обрушилось. Расследование показало, что виновником оказался модуль Trash, который криво переопределяет node_view и таким образом входит в конфликт с панелями. Также в ходе исследования оказалось, что Trash некорректно использует таблицу модуля ядра Node. Мы стали искать альтернативные модули.
Альтернатив оказалось две: Trashbin и Killfile. К сожалению, оба они не предоставляют полноценных инструментов для управления корзиной и ограничения доступа к "удаленным" нодам. В идеале было бы взять и скрестить все три модуля, добавив необходимых вкусностей. Можно было попросить мейнтейнерство одного из модулей и соответсвенно довести до ума. Trash пришлось бы переписывать с нуля, полностью изменив архитектуру, но автор модуля твёрдо дал понять, что она его устраивает, и менять он её не хочет. Trashbin позиционируется как супер-легкий модуль, который не будет "утяжеляться", а Killfile в качестве основы подходит меньше всего, так как почти не имеет пересечений в необходимом функционале и имеет странный крен в сторону RSS.
Итог - разработка своего модуля Junk и успешный запуск в эксплуатацию на крупном продакшн сайте. Потом появилась идея поделиться содеяным с Drupal сообществом, и был пройден длинный путь от Code Review до First Release Commit (отдельная история...).
- 978 просмотров


Комментарии
новости из жизни мадрида
новости из жизни мадрида самые последние новости из жизни мадрида кризис как вытаскивают компанию из „прорыва“ возникший из ничего магия вращательного движения население климат австралии робинзон продолжает исследовать остров схватка с пиратами seropol5
Отправить комментарий