Drupal → Опознаём спам в комментариях по количеству ссылок в сообщении

05.09.2010

Код выводит сообщение анониму, который пытается оставить комментарий с числом ссылок в нём >= 5 (комментарий в базу естественно не попадает):

/**
 * Implements hook_comment().
 */
function mymodule_comment(&$a1, $op) {
  if ($op == 'validate' && user_is_anonymous() && substr_count($a1['comment'], '<a href=') >= 5) {
    form_set_error('comment', 'Ваше сообщение очень похоже на спам — в нём слишком много ссылок.');
  }
}
Написанное актуально для
Drupal 6.x
Похожие записи

Комментарии

Гость и в африке гость
14.10.2010, 18:49

Что-то не работает у меня. я правильно понял, что данный код надо поставить в template.php ?
И не понятно надо ли менять функцию mymodule_comment май модуль на модуль для которого предназначаются комментарии типа node или я совсем ничего не понимаю? ... :(

я правильно понял, что данный код надо поставить в template.php

нет. template.php это сердце темизации, он никаким образом не влияет на логику работы друпала. для расширения функционала существуют модули и система хуков. как создавать свои модули неоднократно писал.

И не понятно надо ли менять функцию mymodule_comment май модуль

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

Создал модуль spamlinks_comment. В его директорию поместил файлы spamlinks_comment.info и spamlinks_comment.module с содерджанием:

<?php
// $Id$
 
/**
 * Реализация hook_comment()
 */
function mymodule_comment(&$a1, $op)
{
    global $user;
 
    if ($op == 'validate' && $user->uid == 0 && substr_count($a1['comment'], '<a href=') >= 5)
    {
        form_set_error('comment', 'Ваше сообщение очень похоже на спам — слишком много ссылок.');
    }
}

Включил модуль, попробовал отправить несколько тестовых комментариев (6 ссылок, 7 ссылок, 9 ссылок + текст), все комментарии были опубликованы без каких-либо ошибок. Т.е. ни один комментарий не был заблокирован за ссылки.

Я что-то где-то сделал неправильно? :-)

А можно такой коммент не отвергать, а записать, но при этом сделать неопубликованным?

Добавить комментарий