ya ne robot ya robert

Небольшая предыстория. Я изначально использовал родную капчу компонента JComments - kcaptcha. В какой-то момент отключил ее, поскольку она раздражала комментаторов. Тут же в комментарии посыпался спам в гигантских количествах. Начал использовать CleanTalk - символически платный ($9 в год) плагин, защищающий от спамботов не только комментарии, но и вход/регистрацию, контакты и формы многих сторонних расширений. Спам было прекратился, но в последнее время эти гады настрополились слать мусорные комментарии, по форме маскирующиеся под нормальные и даже включающие в тексте заголовки статей. Их CleanTalk пока отфильтровать не может. Подобных "комментариев" стало приходить по 4-5 в день - не очень критично, да и убивать их легко прямо из уведомлений в почте. Но все же захотелось найти компромиссное решение проблемы - капчу, блокирующую не отлавливаемый CleanTalk-ом спам, но в то же время не раздражающую потенциальных комментаторов.

NO CAPTCHA reCAPTCHA от Гугла (или просто reCAPTCHA v2.0) подходит идеально. Начиная с Joomla 3.4, вторая версия включена в плагин reCAPTCHA, поставляемый с CMS. На время написания прошло почти два года с того релиза, а разрабы JComments так и не озаботились добавить поддержку этого плагина в свой компонент. Это никак не умаляет его достоинств - JComments был и остается лучшим бесплатным решением для комментариев на Джумла-сайте. Тем более что встроить сабж в комментарии достаточно просто своими силами. Для этого вам предстоит выполнить ряд несложных действий.

  1. Если ваш сайт не зарегистрирован в reCAPTCHA, заходите на страницу сервиса, кликаете на кнопку Get reCAPTCHA и добавляете доменное имя сайта. (Понятно, что нужно иметь аккаунт в Google.) Получаете два ключа - публичный и приватный. Замечу здесь, что если вы ранее пользовались первой версией reCAPTCHA, ключи для нее не подходят ко второй версии.
  2. В админке сайта заходим в Расширения | Extensions > Менеджер плагинов | Plugins, находим плагин CAPTCHA - reCAPTCHA и кликаем на его имя. В настройках плагина выбираем версию 2.0, вводим полученные от Гугла ключи, определяем стиль и размер. Если плагин выключен - включаем его. Сохраняем настройки.
  3. Редактируем два файла компонента JComments. Вам понадобится найти указанные оригинальные куски кода и заменить их на кастомизированные. Кликабельные скриншоты результатов сравнения в WinMerge с номерами строк и подсветкой изменений наглядно покажут, где, что и на что поменять (справа - изначальный код, слева - измененный).

    Изменение 1.

    Редактируем файл components\com_jcomments\tpl\default\tpl_form.php. Находим следующий кусок кода:

    if ($this->getVar('comments-form-captcha', 0) == 1) {
        $html = $this->getVar('comments-form-captcha-html');
        if ($html != '') {
          echo $html;
        } else {
          $link = JCommentsFactory::getLink('captcha');
    ?>
    <p>
      <span>
        <img class="captcha" onclick="jcomments.clear('captcha');" id="comments-form-captcha-image" src="<?php echo $link; ?>" width="121" height="60" alt="<?php echo JText::_('FORM_CAPTCHA'); ?>" /><br />
        <span class="captcha" onclick="jcomments.clear('captcha');"><?php echo JText::_('FORM_CAPTCHA_REFRESH'); ?></span><br />
        <input class="captcha" id="comments-form-captcha" type="text" name="captcha_refid" value="" size="5" tabindex="6" /><br />
      </span>
    </p>
    <?php
        }
    }
    ?>

    Заменяем на:

    if ($this->getVar('comments-form-captcha', 0) == 1) {
     
      $captchaEngine = 'recaptcha'; //or 'kcaptcha'
     
      if ($captchaEngine == 'recaptcha') {
        JPluginHelper::importPlugin('captcha');
        $dispatcher = JDispatcher::getInstance();
        $dispatcher->trigger('onInit','dynamic_recaptcha_1');
        $recaptcha = $dispatcher->trigger('onDisplay', array(null, 'dynamic_recaptcha_1', 'class=""'));
    ?>
    <div id="comments-form-captcha-holder">
      <?php echo (isset($recaptcha[0])) ? $recaptcha[0] : ''; ?>
    </div>
    <?php	
      } else if ($captchaEngine == 'kcaptcha') {
        $html = $this->getVar('comments-form-captcha-html');
        if ($html != '') {
          echo $html;
        } else {
          $link = JCommentsFactory::getLink('captcha');
    ?>
    <p>
      <span>
        <img class="captcha" onclick="jcomments.clear('captcha');" id="comments-form-captcha-image" src="<?php echo $link; ?>" width="121" height="60" alt="<?php echo JText::_('FORM_CAPTCHA'); ?>" /><br />
        <span class="captcha" onclick="jcomments.clear('captcha');"><?php echo JText::_('FORM_CAPTCHA_REFRESH'); ?></span><br />
        <input class="captcha" id="comments-form-captcha" type="text" name="captcha_refid" value="" size="5" tabindex="6" /><br />
      </span>
    </p>
    <?php
        }
      }
    }
    ?>

    Результат сравнения:

    Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments - кастомизация 1

    Изменение 2.

    Редактируем код файла components\com_jcomments\jcomments.ajax.php. Здесь заменить предстоит всего одну строчку:

    $captchaEngine = $config->get('captcha_engine', 'kcaptcha');

    Код для замены:

    $captchaEngine = 'recaptcha'; //or 'kcaptcha'
     
    if ($captchaEngine == 'recaptcha') {
      $post = JRequest::get('post');  
      JPluginHelper::importPlugin('captcha');
      $dispatcher = JDispatcher::getInstance();
      $result = $dispatcher->trigger('onCheckAnswer', $post['recaptcha_response_field']);
      $response->addScript('grecaptcha.reset();');
     
      if (!in_array(true, $result, true)) {
        self::showErrorMessage(JText::_('ERROR_RECAPTCHA_V2'), 'captcha');
        return $response;
      }
    } else

    Результат сравнения:

    Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments - кастомизация 2

  4. Если комментатор забыл кликнуть на капчу, всплывает сообщение об ошибке. Для текста сообщения по умолчанию используется константа ERROR_CAPTCHA из языкового файла компонента. Ее значение - "Пожалуйста, введите код изображенный на картинке!". Поскольку никакой картинки с кодом теперь нет, я заменил сообщение на более подходящее - "Пожалуйста, подтвердите, что вы не робот!" и присвоил его новой константе ERROR_RECAPTCHA_V2. Почему я решил ввести новую языковую константу, а не переопределить значение уже имеющейся, а также - как и куда ее добавить, разъясняется в следующей статье.
  5. Чтобы органично вписать капчу в блок комментария на странице, задайте стиль элемента <div id="comments-form-captcha-holder"> в файле стилей вашего активного шаблона. Мне, например, оказалось достаточно выровнять его по вертикали, для чего я добавил в css-файл моего шаблона следующий код:
    div#comments-form-captcha-holder {
        margin-top: 16px !important;
        margin-bottom: 20px !important;
    }
  6. Чтобы включить вывод капчи для соответствующих групп пользователей, открываем меню Компоненты | Components > JComments, заходим в Настройки | Settings, после чего кликаем на закладке Права | Permissions. Для выбранных групп пользователей (я рекомендую для ВСЕХ) отмечаем галку Защита от спамботов (CAPTCHA) | Enable CAPTCHA. Во вкладке же Вид | Layout в выпадающем списке CAPTCHA остается выбранным единственное значение - KCAPTCHA. Здесь это ни на что не влияет, выбор же между старой kcaptcha и новой удобной reCAPTCHA v2.0 осуществляется в измененном коде. Если по какой-либо причине вам захочется вернуться к родной капче компонента, просто измените строки
    $captchaEngine = 'recaptcha'; //or 'kcaptcha'

    в обоих файлах на такие:

    $captchaEngine = 'kcaptcha'; //or 'recaptcha'

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

Комментарии  

Вованя
+1 # Вованя 25.12.2019 18:31
Проверка, просто проверяю. раз раз раз)
Ответить | Ответить с цитатой | Цитировать
Вованя
-1 # Вованя 25.12.2019 18:31
12345
Ответить | Ответить с цитатой | Цитировать
Валерий
0 # Валерий 21.02.2020 03:25
Проверка
Ответить | Ответить с цитатой | Цитировать
ТвойБро
0 # ТвойБро 24.03.2020 03:42
Огромное спасибо, помогло. Странно, что по дефолту в jcomments предлагает в настройках выбрать recaptcha, но нигде не сообщается о том, что jcomments recaptcha'у не поддерживает без внесения изменений в код..
Ответить | Ответить с цитатой | Цитировать
Николай3333
0 # Николай3333 05.08.2020 07:55
Неужели работает?
Ответить | Ответить с цитатой | Цитировать
Тест
0 # Тест 25.08.2020 11:37
Не выводит сообщение об ошибке, если галку не нажать в рекапче
Ответить | Ответить с цитатой | Цитировать
Серге
0 # Серге 05.07.2021 09:46
Проверка рекапчи
Ответить | Ответить с цитатой | Цитировать
Maynard
-1 # Maynard 20.09.2021 12:31
I was wondering if you ever thought of changing the structure of your website?
Its very well written; I love what youve got to say.
But maybe you could a little more in the way of content so people could connect with it
better. Youve got an awful lot of text for only having one or 2 pictures.
Maybe you could space it out better?

Look into my blog: jj; Maynard,
Ответить | Ответить с цитатой | Цитировать
Veronique
-1 # Veronique 20.09.2021 22:54
Terrific article! That is the type of info that are supposed to be
shared around the net. Disgrace on Google for no longer positioning this submit higher!
Come on over and talk over with my website . Thanks =)

Visit my blog post - cy (Veronique)
Ответить | Ответить с цитатой | Цитировать
mm
-1 # mm 24.12.2021 22:41
Unquestionably imagine that that you said.

Your favourite justification appeared to be on the
internet the simplest factor to take note of.
I say to you, I definitely get annoyed whilst other
folks consider issues that they just don't recognize about.

You controlled to hit the nail upon the top and also defined out the entire thing
with no need side effect , folks can take a signal. Will likely be again to get more.
Thanks

Here is my web site - mm
Ответить | Ответить с цитатой | Цитировать
ameblo.jp
0 # ameblo.jp 02.03.2022 04:43
Hello to every single one, it's in fact a leasant for me to pay a visit this web page, it consists of usefuhl Information.

My web page: カップルペアセーター; ameblo.jp,
Ответить | Ответить с цитатой | Цитировать
https://ameblo.jp
0 # https://ameblo.jp 26.03.2022 03:58
Awesome blog! Is your theme custom made or did you download it from somewhere?
A theme like yours with a ffew simple tweeks would really make my blog shine.
Please let me know where yoou got your design.Bless you

Here is my blog: 福田麻琴 [https://ameblo.jp]
Ответить | Ответить с цитатой | Цитировать
Порно ебли
+1 # Порно ебли 15.06.2022 02:47
В современность зайдя на Порно ебли
многие люди всегда имеют массу семейных заморочек, и
{им} следует отвязываться.
Некто свершает это с приятелями, кто-то на занятиях,
а многие попросту захлопывается в жилой комнате и лазиет по
webу, навещая ходовые страницы сайтов.

Для последней группы я намереваюсь рекомендовать великолепный
романический веб сайт Сквирт - порно сайт, там Вас ожидают
качественные видосы с необычными барышнями разного
строения фигуры. Эти крали позволят выбросить из головы обыденные проблемы, по крайней мере на некое
время суток. Попросту прислушайтесь к моему совета и
заходите на названный наш портал, лично я даю слово, вы не усомнитесь.
Ответить | Ответить с цитатой | Цитировать
bonanza88 apl
0 # bonanza88 apl 30.07.2022 12:42
Greetings! I've been following your weblog for a while now and finally got the bravery
to go ahead and give you a shout out from Lubbock Texas!
Just wanted to tell you keep up the excellent work!

Feel free to visit my page ... bonanza88 apl
Ответить | Ответить с цитатой | Цитировать
Louisa
0 # Louisa 30.07.2022 14:18
This is the perfect blog for anybody who really wants to find out about this topic.

You know so much its almost tough to argue with you (not
that I really would want to…HaHa). You definitely put a new spin on a topic that has
been written about for a long time. Wonderful stuff, just wonderful!
Ответить | Ответить с цитатой | Цитировать
antik bet
0 # antik bet 31.07.2022 11:33
Wonderful blog! I found it while surfing around on Yahoo
News. Do you have any suggestions on how to get listed in Yahoo News?
I've been trying for a while but I never seem to get there!
Thank you

Also visit my homepage :: antik bet
Ответить | Ответить с цитатой | Цитировать
situs casino online
0 # situs casino online 31.07.2022 13:50
I'll right away clutch your rss feed as I can't in finding your email subscription link or newsletter
service. Do you have any? Please allow me know in order that I may subscribe.
Thanks.

Also visit my webpage - situs casino online
Ответить | Ответить с цитатой | Цитировать
antikbet
0 # antikbet 31.07.2022 14:11
I've been exploring for a bit for any high-quality articles or blog
posts in this sort of space . Exploring in Yahoo I ultimately stumbled upon this web site.
Reading this information So i am satisfied to express
that I have an incredibly good uncanny feeling I came upon just what I
needed. I such a lot without a doubt will make sure to do not disregard this site and provides it a glance on a constant basis.



Take a look at my blog post - antikbet
Ответить | Ответить с цитатой | Цитировать
situs casino
0 # situs casino 31.07.2022 18:20
May I simply just say what a comfort to uncover a person that actually understands what they're discussing
on the net. You definitely know how to bring an issue to light and make it important.
More and more people need to look at this and understand this side of the story.
I was surprised you're not more popular because
you certainly possess the gift.

Also visit my webpage; situs
casino
Ответить | Ответить с цитатой | Цитировать
antikbet
0 # antikbet 31.07.2022 19:08
Quality content is the crucial to interest the viewers to pay a visit the web page,
that's what this website is providing.

Feel free to surf to my site; antikbet
Ответить | Ответить с цитатой | Цитировать
qq
0 # qq 01.08.2022 10:54
Its good as your other content :D, thank you for posting.


Also visit my web page qq
Ответить | Ответить с цитатой | Цитировать
Antikbet
0 # Antikbet 01.08.2022 13:40
I was able to find good info from your articles.

my page :: Antikbet
Ответить | Ответить с цитатой | Цитировать
casino online
0 # casino online 01.08.2022 20:12
I don't even know the way I stopped up right here, however I thought this put up was good.
I don't recognise who you are but certainly you're going to a
famous blogger for those who aren't already ;) Cheers!


Also visit my blog post :: casino online
Ответить | Ответить с цитатой | Цитировать
https://sipetra.id
0 # https://sipetra.id 03.08.2022 03:54
Only a smiling visitant here to share the love (:, btw outstanding pattern.

my homepage :: https://sipetra.id
Ответить | Ответить с цитатой | Цитировать

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


Работая с этим сайтом, вы даете свое согласие на использование файлов cookie, необходимых для сохранения выбранных вами настроек, а также для нормального функционирования сервисов Google.