Skip to Content

Печеньки и 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 (отдельная история...).

Комментарии

новости из жизни мадрида

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

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

Содержание этого поля является приватным и не предназначено к показу.
Smileys
:):D:bigsmile:;):p:O:|:(:~:((8):steve:J):glasses::party::love:
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <span> <div> <h2> <h3>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Image links with 'rel="lightbox"' in the <a> tag will appear in a Lightbox when clicked on.
  • Image links from G2 are formatted for use with Lightbox2
  • Textual smileys will be replaced with graphical ones.
  • You may insert videos with [video:URL]

Подробнее о форматировании

Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated.