Система модерирования контента на Views (мануал)

Главные вкладки

Аватар пользователя T-34 T-34 26 августа 2009 в 0:18
Quote:
Вы, камрады, плохо себе представляете - что такое 50.000 человек в сутки и количество малолетних дебилов в сети.

Премодерация - она не потому, что мне так хочется, а потому, что без неё всё умрёт в течение часа.

Goblin

Хочу рассказать о том, как с помощью Views и пары дополнительных модулей можно построить на Drupal-сайте довольно мощную и гибкую систему модерирования контента. Речь пойдет о премодерации, но для постмодерации принцип тот же.
Если вы заинтересованы в модерации контента на своем Drupal-сайте, но ничего лучше модулей modr8 или Moderation для этих целей вы не нашли, то эта статья для вас.

Цель

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

Модули

Drupal версии 6* позволяет создать такой интерфейс с помощью следующих модулей:

Moderation skip
Views
Views Bulk Operations
Publish Content

* Не уверен в том, что в Drupal 5 (с использованием Views 1) возможно то же.

Итак, если вы еще не работали со всеми этими модулями, приступим к их установке и настройке.

Скачиваем модули, распаковываем и складываем в директорию sites/all/modules.
На странице со списком модулей (admin/build/modules) отмечаем Moderation skip, Publish Content, Views, Views Bulk Operations и Views UI и сохраняем изменения.

Настройки типов материалов, создание ролей и установка разрешений

Нам нужно, к примеру, чтобы пользователи с ролью "Moderator" могли модерировать лишь материалы типа page, а юзеры с ролью "Supermoderator" - все типы контента.

Для начала изменим настройки типов материалов. На странице настроек материала page (admin/content/node-type/page) раскрываем группу полей Workflow settings (Процесс) и снимаем галочку с Published (Опубликовать). Для остальных типов контента, подлежащих модерации, повторяем те же действия. Это нужно для того, чтобы по умолчанию все добавляемые пользователями материалы отправлялись на проверку администрацией.

Далее, на странице ролей (admin/user/roles) создаем новые роли Moderator и Supermoderator.

Затем переходим на страницу настройки разрешений (admin/user/permissions).
Чтобы зарегистрированные пользователи имели возможность создавать материалы определенных типов, у них должны быть соответствующие права (create page content, create story content).
Модераторам мы предоставим право публиковать материалы без проверки - для этого для наших новых ролей отмечаем разрешение skip node moderation.

Здесь нужно объяснить, что же делает модуль moderation skip. Заглянем в moderation_skip.module и найдем там всего 2 функции.

<?phpfunction moderation_skip_perm() {
  return array('skip node moderation');
}?>

— создает право доступа skip node moderation, которое мы установили для модераторов.

function moderation_skip_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
  switch ($op) {
    case 'presave':
      if ($node->status != 1 && user_access('skip node moderation'))
        $node->status = 1; // Publish the node.
      break;
  }
}

— эта функция используется для внесения изменений в ноду перед ее сохранением в базу данных, а именно - публикует ее, если она до этого не была опубликована и у пользователя, создающего/редактирующего ее, есть право skip node moderation.

То есть теперь, во-первых, материалы, создаваемые модераторами и супермодераторами, будут автоматически публиковаться, а во-вторых, если модератор отредактирует неопубликованную ноду простого пользователя, то она также будет опубликована - и для этого не нужно ставить галочку Published внизу формы редактирования.
Однако стоит заметить, что пользователь с правом skip node moderation (в том числе суперпользователь, обладающий всеми правами) не сможет снимать ноды с публикации. Поэтому, если эта возможность вам необходима, стоит отказаться от модуля moderation skip. Лично я никогда не снимаю материалы с публикации, но часто в процессе модерации приходится редактировать неопубликованные ноды, поэтому разрешение skip node moderation для меня незаменимо.

Вернемся к другим разрешениям, которые необходимо установить для созданных нами ролей. Напомню, что в нашем примере Модератор должен заниматься исключительно материалами типа page, а Супермодератор - материалами любого типа.
Отмечаем для Модератора разрешения delete any page content, edit any page content, publish page content и unpublish page content, а для Супермодератора - administer nodes, publish *all* content и unpublish *all* content; сохраняем изменения.
permissions.png

Модуль publishcontent добавляет ссылку Publish/Unpublish (в зависимости от текущего статуса ноды) на страницу ноды для пользователей, обладающих соответствующими правами. Т.е. модераторы смогут публиковать и снимать с публикации материалы типа page, а супермодераторы - любые материалы.

С настройкой разрешений пока покончено, теперь можно назначать модераторов. Для этого на странице редактирования пользователя (user/2/edit для юзера с uid = 2) нужно отметить чекбокс с нужной ролью. Впрочем, если вы пока не знаете, кому доверить модерацию контента на своем сайте, это можно будет сделать и позже, когда вы найдете подходящих людей. Сейчас главное, что у нас есть нужные роли.

Настройка Views

Наконец мы добрались до настройки интерфейса модерирования.

Переходим на страницу admin/build/views. Представление admin_content предоставлено модулем Views Bulk Operations. Можете перейти по ссылке admin/content/node2 и поиграть с фильтрами и операциями над нодами.
Вообще-то можно обойтись этим представлением, но лучше немного изменить его под свои нужды. В любом случае нам придется установить свои правила доступа к странице представления, поэтому отредактируем его, перейдя по ссылке Edit (Редактировать) на адрес admin/build/views/edit/admin_content.

Поля

Сперва выберем нужные поля. Во-первых, нужно добавить поле с аннотацией или полным текстом материала. Нажимаем на плюсик в блоке Fields (Поля), в выпадающем списке выбираем группу Node (Материал) и отмечаем чекбокс Node: Body (Материал: Текст) или Node: Teaser (Материал: Аннотация) - на ваш выбор. Label (Подпись) можно убрать, чтобы глаза не мозолила - это замечание справедливо для всех полей.
Учтите, что если вы выбираете для отображения полный текст, и на вашем сайте нередки объемные публикации, то стоит ограничить Items per page (число материалов на страницу) в блоке Basic settings (Основные настройки) до небольшого числа (я бы выбрал от 1 до 5). Если же тексты публикуются небольшие, или используются короткие аннотации, 10-20 Items per page - вполне комфортное число.

Поля Type, Author и Published (Тип, Автор и Опубликовано) я отключаю, чтобы было больше места для текста.

Можно добавить ссылку Publish/Unpublish, предоставляемую модулем publishcontent - она полезна, если на странице модерирования отображается много материалов, а опубликовать хочется всего один из них. Также можно добавить ссылку для удаления отдельного материала - решайте сами, что вам нужно.

Когда все ненужные поля удалены, а нужные - добавлены, нужно их отсортировать в предпочитаемом порядке. Логично, когда сперва идет заголовок ноды, затем текст, а далее - ссылки "редактировать" и "опубликовать".

Сортировка

Теперь изменим порядок сортировки. В соответствующем блоке нажимаем на Node: Updated date (Материал: Дата создания) и меняем Sort order (Порядок сортировки) на Ascending (По возрастанию). Теперь вверху будут старые материалы, а не новые.

Фильтры

Перейдем к фильтрам. Ненужные можно удалить, а необходимые - добавить. Например, нам нужны материалы отдельных пользователей. Создаем фильтр User: Name (Пользователь: Имя), нажимаем Expose (Обособить) и сохраняем.
Также в настройках фильтра Node: Published (Материал: Опубликовано) нужно сменить (<Все>) на No (Нет), чтобы по умолчанию в модерке выводились только неопубликованные ноды.

Bulk Operations (пакетные операции)

А сейчас посмотрим, какие же действия предоставляет нам модуль Views Bulk Operations - для этого нажмем на шестеренку рядом с Style: Bulk Operations. Большинство операций можно отключить, оставив только действительно нужные: Delete node (Удалить материал) и Publish post (Опубликовать).

С настройками представления по умолчанию мы закончили, теперь перейдем к настройкам страницы (Page). Здесь не будем трогать ничего, кроме пути (Path) - изменим admin/content/node2 на admin/moderation.

Отлично, мы закончили со страницей для супермодератора. Почему именно для него - спросите вы? Потому, что Access (Доступ) стоит только для обладающих разрешением administer nodes, которое мы устанавливали для роли Supermoderator. Если обычный пользователь или обычный модератор попытается зайти на страницу admin/moderation, ему будет отказано в доступе.

Значит, для модераторов, занимающихся контролем контента типа page, нужно создать отдельную страничку модерирования. Чтобы не возникло путаницы, уже имеющуюся Page переименуем в "Страница супермодератора", а новую, которую создадим, нажав на Add display (Добавить вывод), назовем "Страница модератора".

Установим путь для новой страницы - пусть будет admin/moderation/page, ведь там должны выводиться только материалы типа page. Для этого, кстати, нужно отредактировать фильтр Node: Type (Материал: Тип) - отметить Page и нажать Override (Переопределить), чтобы переопределить настройки представления по умолчанию, а также нажать Hide (Скрыть), чтобы модератор не мог сам фильтровать материалы по типу.

А теперь установим право доступа к странице для роли Moderator. Нажимаем на administer nodes, переопределяем настройку, выбираем Role (Роль) и отмечаем Moderator.

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

Ну вот вроде и все. Побольше хорошего контента и удачной модерации вам!

Скоро на экранах: "Модерирование терминов таксономии. Зачем и как?"

Комментарии

Аватар пользователя otmoroz otmoroz 14 апреля 2010 в 13:27

А я хотел бы узнать как ДОБАВИТЬ свой views со стилем Bulk Operations и там создать свои операции. Это реально?

Аватар пользователя otmoroz otmoroz 19 апреля 2010 в 10:21

В твоем примере, Bulk выдал перечень каких-то стандартных операций. А вот где и как добавить свои операции, допустим "Выбор раздела", "Добавление файла" или еще че-нить такое?

Аватар пользователя T-34 T-34 19 апреля 2010 в 19:02

Создавать свои Bulk Operation через админку, насколько я знаю, нельзя, значит только дописывать, пользуясь API.

Аватар пользователя ekko ekko 8 апреля 2011 в 18:36

подскажите пожалуйста где найти модуль moderation skip для drupal 6. Почему-то поиск не находит... А скачать по ссылке не могу, так как идет переадресация на главную страницу.

Аватар пользователя otmoroz otmoroz 9 августа 2011 в 14:05

я зашел на твой сайт и обнаружл... то, что меня могут уволить, за то, что я полдня на нем просидел)) спасибо за угарный сайт)

Аватар пользователя Marusya_1234567 Marusya_1234567 10 ноября 2011 в 18:20

Огромное спасибо. Мне Ваша статья очень помогла. Очень подробное описание всего процесса, просто замечательно. Еще раз спасибо!

Аватар пользователя sashken sashken 30 ноября 2011 в 7:47

Этот код не работает в 7-ке (на странице прав пользователей ничего не появляется). Подскажите, пожалуйста, как тоже самое сделать для Drupal 7


<?phpfunction moderation_skip_perm() {
  return array('skip node moderation');
}?>
<?php
function moderation_skip_nodeapi(&$node$op$teaser NULL$page NULL) {
  switch (
$op) {
    case 
'presave':
      if (
$node->status != && user_access('skip node moderation'))
        
$node->status 1// Publish the node.
      
break;
  }
}
?>