xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Код выводит сообщение анониму, который пытается оставить комментарий с числом ссылок в нём >= 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
Похожие записи

Комментарии RSS

Что-то не работает у меня. я правильно понял, что данный код надо поставить в 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 ссылок + текст), все комментарии были опубликованы без каких-либо ошибок. Т.е. ни один комментарий не был заблокирован за ссылки.

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

Спасибо, будем разбираться.

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

можно

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

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

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