Категория:
Опубликовано:

Премодерация комментариев программно

moderation

Спамеры - такие спамеры...

Очень часто, скорее постоянно, если на сайте есть возможность добавлять комментарии, найдутся роботы люди, которые будут лить туда всякое г**но, в виде Spam-комментариев.

Это может начаться не сразу, но обязательно начнется...

Что ж, у нас "под капотом" Drupal, и наверняка мы найдем на них управу.

Безусловно, можно установить капчу, и в Drupal это делается довольно просто, но я не сторонник лишних движений и ответов на не нужные вопросы. Иногда это просто бесит, особенно если вводить капчу нужно каждый раз.

Так же можно просто отключить публикацию комментариев до их проверки. Но это тоже не вариант. Для пользователя опубликовавшего комментарий все это выглядит весьма "напряжно".

Есть еще интересные модули:

  • Mollom - весьма действенный, даже в бесплатной версии
  • Honeypot - обманка по времени публикации коммента
  • Simple Anti-Spam - обманка по "жадности" роботов

Но разве это наш метод? Установка чужих модулей )))

Делаем свой велосипед. И в этом нам поможет Comment API.

А именно, хук hook_comment_presave.

Хук вызывается перед сохранением комментария, с его помощью можно модерировать комментарии программно, в автоматическом режиме, и вносить изменения перед сохранением.

Вызвать хук можно в своем модуле, или в файле template.php Вашей темы.

Делается это достаточно просто:

/**
 *  Implements hook_comment_presave().
 */
function ИМЯ_МОДУЛЯ_comment_presave($comment){
  // Здесь можно получить данные отправленного комментария и провести его модерацию
}

Текст стандартного поля "Body" комментария можно вытащить следующим образом:

$val = $comment->comment_body['und'][0]['value']; // Поле с текстом комментария

Если комментарий не проходит нашу модерацию - снимаем его с публикации:

$comment->status = 0;

Для примера, проведем проверку на вхождение в комментарий фразы "Я спамер":

/**
 *  Implements hook_comment_presave().
 */
function ИМЯ_МОДУЛЯ_comment_presave($comment){
  $val = $comment->comment_body['und'][0]['value'];
    if (preg_match("/Я спамер/", $val)) {
      $comment->status = 0;
    }
}

Таким образом, мы отфильтруем комментарии "честных" спамеров.

Еще один небольшой пример для обработки нескольких запрещенных слов, т.н. мат-фильтр:

/**
 *  Implements hook_comment_presave().
 */
function ИМЯ_МОДУЛЯ_comment_presave($comment){
  $val = $comment->comment_body['und'][0]['value'];
  $comment->comment_body['und'][0]['value'] = preg_replace('/(мат1|мат2|мат3)/', 'Котик', $val);
}

В этом примере мы заменяем фразы "мат1", "мат2" и "мат3" фразой "Котик". Забавные комментарии получаться ))

Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.

Комментарии

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

и снова спасибо