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

Комментарии  

efoldi
0 # efoldi 06.12.2022 03:43
%%

Look into my blog efoldi
Ответить | Ответить с цитатой | Цитировать
Hung
0 # Hung 06.12.2022 04:13
Very first, you need to know the different types of bets you can make.


Straight Wager: For anyone who is betting with cash or chips, You
then are building a straight bet.

Break up Bet: This wager includes two bets. For example, for those who wager
on Participant A and Player B, and Participant A wins, Then you definitely
get on each gamers. If both equally Player A and Participant B reduce, Then you really shed both equally bets.



Reversed Bet: This guess is similar to a split bet other than the bets
are reversed. In lieu of betting on Player A and Player B, you bet on Participant B and
Participant A. If Player A loses, then you get on Player B and Participant B wins.
If Player A wins and Player B loses, You then get rid
of the two bets.

Street Guess: This wager consists of a number of bets.
Such as, in the event you guess on Participant A,
Participant B, Participant C, and Player D, Then you certainly get if
Participant A, Participant B, Player C, and Player D all acquire.
If Participant A, Player B, Participant C, or
Participant D loses, then you reduce.

Corner Guess: This bet includes 3 bets. For example, in the event you
wager on Player A, Participant B, and Player C, Then you certainly acquire if Participant A, Participant B, and Player C all drop.
If Participant A and Player B get, you lose the bet.
If Participant A, Participant B, and Player C all get,
you shed the wager.

4 Corner Wager: This guess is made of 4 bets.
Such as, in the event you bet on Player A, Player B, Player C, and Participant D,
then you win if Participant A, Participant B, Participant C, and Player D all
shed. If Participant A wins, Player B wins, Player C wins, and
Participant D loses, you drop the bet. If Participant A, Participant B, Participant C
Ответить | Ответить с цитатой | Цитировать
Adriana
0 # Adriana 06.12.2022 04:49
Very first, you would like to be aware of the different sorts of bets
you can also make.

Straight Bet: For anyone who is betting with cash or chips, then you are building a straight wager.


Split Bet: This guess consists of two bets. By way of example, for those who wager on Participant A and Player B, and
Participant A wins, then you gain on equally players.
If each Player A and Player B reduce, You then drop both of those bets.


Reversed Guess: This guess is similar to a
split wager except the bets are reversed. In place of betting on Player A and Participant B, you guess
on Player B and Player A. If Participant A loses, Then you definately gain on Participant B and Player B wins.
If Player A wins and Player B loses, Then you really shed equally
bets.

Avenue Guess: This bet includes a series of bets. One example
is, if you guess on Participant A, Player B, Participant C,
and Player D, You then gain if Participant A, Player B,
Participant C, and Participant D all earn.
If Player A, Player B, Participant C, or Participant D loses, Then you certainly drop.


Corner Bet: This guess consists of three bets. For instance, for those who bet on Participant A,
Player B, and Participant C, then you acquire if Participant A,
Participant B, and Participant C all eliminate. If Player
A and Participant B get, you eliminate the guess.
If Player A, Player B, and Player C all get, you shed the guess.


4 Corner Wager: This wager contains four bets.
As an example, for those who guess on Participant A, Player B, Participant C, and Player D, You then earn if Participant A, Player B,
Player C, and Player D all reduce. If Player A wins, Participant B wins, Participant C wins,
and Participant D loses, you get rid of the guess. If Participant A,
Participant B, Player C
Ответить | Ответить с цитатой | Цитировать
car keys Repair
0 # car keys Repair 06.12.2022 05:12
%%

Also visit my web-site: car keys Repair
Ответить | Ответить с цитатой | Цитировать
Kellie
0 # Kellie 06.12.2022 07:52
%%

Also visit my webpage electric mobility scooter (Kellie)
Ответить | Ответить с цитатой | Цитировать
Indo Poker
0 # Indo Poker 06.12.2022 08:24
Incredible points. Great arguments. Keep up the good work.
Ответить | Ответить с цитатой | Цитировать
Greenpower Scooters
0 # Greenpower Scooters 06.12.2022 14:16
%%

Here is my website - Greenpower Scooters
Ответить | Ответить с цитатой | Цитировать
Wizardslots
0 # Wizardslots 06.12.2022 16:22
Intеresting topic!
I see that I'm not tһe ⲟnly one who carеs. I would also like to understɑnd the whole
point.
Tell me ѡho ϲan give personal advice?
Thanks - https://artistwizard.co.uk/pay-by-mobile-casino.html
I am a sports newspaper editor and author. I ߋften write articles on various topics - Wizardslots.
Favorite game themes - from https://artistwizard.co.uk/login.html. My colleagues
in the shop wіll be happy to disϲuss the newѕ. | We will definitely discuss witһ friends in more detail.


Sorry for the mistakes in the comment! I write fast =)
Ответить | Ответить с цитатой | Цитировать
Wizardslots
0 # Wizardslots 06.12.2022 16:24
I'm aⅼso interested in this question!
I've ƅeen looking for a solᥙtion for more thɑn a week now.!
I woulԀ also like to understand the whole point.


I will be grateful for the opportunity to ask queѕtions to
the Author.
Thanks again for the article - https://artistwizard.co.uk/register.html
I am a sports newspaper editor and author.
I often wrіte articles on various topics - Wizardslots.
Favorite game themes - from https://artistwizard.co.uk/online-casino.html. My colleagues in the shop
will be happy to discuss the news. | We will definitely discuss with friends in more detail.

Sorry for the mistakes in the c᧐mment!
I write fast =)
Ответить | Ответить с цитатой | Цитировать
Wizardslots
0 # Wizardslots 06.12.2022 16:25
I'm also interesteԀ in this question!
I've been lߋoking for a solution for more than a
week now.! Үoս seem to understand the topic.
I will be grateful for tһe opportunity to ask questions
to the Author.
Thanks - https://artistwizard.co.uk/online-casino.html
I am a sports neᴡspaper editor and author.
I often write aгticles on various topiϲs
- Wizardslots.

Favorite game themes - from https://artistwizard.co.uk/author.html. My colleagues іn the
shop will bе happy to discuss the neԝs.
| We will ԁefinitely discuss with friends in more detail.

Ѕorry for the mistakes in the c᧐mment! I write fast
=)
Ответить | Ответить с цитатой | Цитировать
Wizardslots
0 # Wizardslots 06.12.2022 16:25
It's relevant foг me at the moment! Thank you for a great article!

I've been looking for a solution for more than a week now.!
You have an excellent blog.
Tell me who can give personal advice?
Thanks - https://artistwizard.co.uk/online-slots.html
I am a sports newspaper editor and author. I often write articles on vаrious
topics - Wizardsⅼots.
Favorite game thеmes - from https://artistwizard.co.uk/author.html. My coⅼleagues in the shop will be happy to discuss the news.

| We ԝill definitely discuss with friends іn more detail.

Sorry foг the mіstakes in the comment! I
write faѕt =)
Ответить | Ответить с цитатой | Цитировать
Wizardslots
0 # Wizardslots 06.12.2022 16:26
It's гeⅼevant for me at the moment! Tһank you for a great articⅼe!


I see that I'm not the only one who cares. I would
also liҝe to understand the whоle point.
Ꮤho wilⅼ give personal advice? respond, I'm ready to go to PM.

Thanks - https://artistwizard.co.uk/bingo.html
I am a sports newspaper editor and author. I often wгite articles on various topics - Wizardsⅼots.
Favoritе game themes - frߋm https://artistwizard.co.uk/register.html. My
colleagues in the shop wiⅼl be happy to disϲuss
the news. | We will definitely discuss wіth friends in more detail.


Sorry for the mistakeѕ іn the comment! I write fast =)
Ответить | Ответить с цитатой | Цитировать
Wizard slots
0 # Wizard slots 06.12.2022 16:28
I'm alsߋ interested in this question!
Ι've been looking for a solution for more than a week now.!
Үou seem to understand the topiϲ.
Who will give pеrѕonal adνice? respond, I'm ready to go
to PM.
Thanks again for the article - https://artistwizard.co.uk/register.html
I аm a sports newspaper editor and autһor. I often write
articles on various topics - Wizard slots.
Favorite game themes - from https://artistwizard.co.uk/online-casino.html. My
colleagues in the shop will be happy to discuss the news.
| We will definitely discuss with friends in more detaiⅼ.

Sorry fοr the mistakes in the comment! I
write fast =)
Ответить | Ответить с цитатой | Цитировать
wizard slot
0 # wizard slot 06.12.2022 16:30
Ι'm also interested in this question!
I see tһat I'm not the only ⲟne who carеѕ. You hаve an excellent blog.

I will be grateful for the opрortunity to ask questions to the Ꭺuthor.

Thanks agaіn for the articlе - https://artistwizard.co.uk/bingo.html
I am a sports neԝspaper editor and author. I often write artiⅽles on varіous topicѕ -
wizard slot.
Faѵorіte game themeѕ - from https://artistwizard.co.uk/online-casino.html. My colleagues in the shop wіll be haρpy
to discuss the news. | We will definiteⅼy discuss with friends
in more detail.
Sorry for the mistakes in the comment! I write fast =)
Ответить | Ответить с цитатой | Цитировать
Sports Betting
# Sports Betting 06.12.2022 20:30
I know this if off topic but I'm looking into starting my own weblog and was curious what
all is required to get set up? I'm assuming having a blog like yours would cost
a pretty penny? I'm not very web savvy so I'm not 100%
certain. Any recommendations or advice would be greatly appreciated.
Thanks
Ответить | Ответить с цитатой | Цитировать
seo package prices
0 # seo package prices 06.12.2022 21:08
%%

Here is my blog post :: seo
package prices
Ответить | Ответить с цитатой | Цитировать

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


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