Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JCommentsОпубликовано: 13.02.2017 13:23 Автор: Ogri Просмотров: 30143
Небольшая предыстория. Я изначально использовал родную капчу компонента JComments
- kcaptcha
. В какой-то момент отключил ее, поскольку она раздражала комментаторов. Тут же в комментарии посыпался спам в гигантских количествах. Начал использовать CleanTalk
- символически платный ($9 в год) плагин, защищающий от спамботов не только комментарии, но и вход/регистрацию, контакты и формы многих сторонних расширений. Спам было прекратился, но в последнее время эти гады настрополились слать мусорные комментарии, по форме маскирующиеся под нормальные и даже включающие в тексте заголовки статей. Их CleanTalk
пока отфильтровать не может. Подобных "комментариев" стало приходить по 4-5 в день - не очень критично, да и убивать их легко прямо из уведомлений в почте. Но все же захотелось найти компромиссное решение проблемы - капчу, блокирующую не отлавливаемый CleanTalk
-ом спам, но в то же время не раздражающую потенциальных комментаторов.
NO CAPTCHA reCAPTCHA
от Гугла (или просто reCAPTCHA v2.0
) подходит идеально. Начиная с Joomla 3.4, вторая версия включена в плагин reCAPTCHA
, поставляемый с CMS. На время написания прошло почти два года с того релиза, а разрабы JComments
так и не озаботились добавить поддержку этого плагина в свой компонент. Это никак не умаляет его достоинств - JComments
был и остается лучшим бесплатным решением для комментариев на Джумла-сайте. Тем более что встроить сабж в комментарии достаточно просто своими силами. Для этого вам предстоит выполнить ряд несложных действий.
- Если ваш сайт не зарегистрирован в reCAPTCHA, заходите на страницу сервиса, кликаете на кнопку Get reCAPTCHA и добавляете доменное имя сайта. (Понятно, что нужно иметь аккаунт в Google.) Получаете два ключа - публичный и приватный. Замечу здесь, что если вы ранее пользовались первой версией reCAPTCHA, ключи для нее не подходят ко второй версии.
- В админке сайта заходим в Расширения | Extensions > Менеджер плагинов | Plugins, находим плагин
CAPTCHA - reCAPTCHA
и кликаем на его имя. В настройках плагина выбираем версию 2.0, вводим полученные от Гугла ключи, определяем стиль и размер. Если плагин выключен - включаем его. Сохраняем настройки. - Редактируем два файла компонента 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 } } } ?>
Результат сравнения:
Изменение 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
Результат сравнения:
- Если комментатор забыл кликнуть на капчу, всплывает сообщение об ошибке. Для текста сообщения по умолчанию используется константа ERROR_CAPTCHA из языкового файла компонента. Ее значение - "Пожалуйста, введите код изображенный на картинке!". Поскольку никакой картинки с кодом теперь нет, я заменил сообщение на более подходящее - "Пожалуйста, подтвердите, что вы не робот!" и присвоил его новой константе ERROR_RECAPTCHA_V2. Почему я решил ввести новую языковую константу, а не переопределить значение уже имеющейся, а также - как и куда ее добавить, разъясняется в следующей статье.
- Чтобы органично вписать капчу в блок комментария на странице, задайте стиль элемента <div id="comments-form-captcha-holder"> в файле стилей вашего активного шаблона. Мне, например, оказалось достаточно выровнять его по вертикали, для чего я добавил в css-файл моего шаблона следующий код:
div#comments-form-captcha-holder { margin-top: 16px !important; margin-bottom: 20px !important; }
- Чтобы включить вывод капчи для соответствующих групп пользователей, открываем меню Компоненты | Components > JComments, заходим в Настройки | Settings, после чего кликаем на закладке Права | Permissions. Для выбранных групп пользователей (я рекомендую для ВСЕХ) отмечаем галку Защита от спамботов (CAPTCHA) | Enable CAPTCHA. Во вкладке же Вид | Layout в выпадающем списке
CAPTCHA
остается выбранным единственное значение - KCAPTCHA. Здесь это ни на что не влияет, выбор же между старой kcaptcha и новой удобной reCAPTCHA v2.0 осуществляется в измененном коде. Если по какой-либо причине вам захочется вернуться к родной капче компонента, просто измените строки$captchaEngine = 'recaptcha'; //or 'kcaptcha'
в обоих файлах на такие:
$captchaEngine = 'kcaptcha'; //or 'recaptcha'
В заключение напомню, что кастомизации придется восстанавливать в случае выхода новых билдов или версий компонента JComments
. Но, на мой взгляд, это не слишком большое неудобство. Во-первых, восстановить изменения займет от силы несколько минут, а во-вторых, разработчики не слишком часто обновляют продукт. Тем не менее - будьте внимательны.
Новые
-
20.07.2020 00:53
Joomla 3: Перенаправление на ту же страницу после авторизации -
13.02.2017 14:09
Joomla: как добавить свои языковые константы или переопределить существующие -
13.02.2017 13:23
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
23.06.2016 10:48
Единая фильтрация вывода модуля mod_jcomments_latest -
13.09.2015 13:06
Постим иллюстрированные статьи Joomla-сайта на Facebook, используя OG-теги
Популярные
-
58704
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
33500
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
31142
Единая фильтрация вывода модуля mod_jcomments_latest -
30144
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
25497
Кнопки социальных сетей в Joomla 2.5
Авторизация
Гитара
Гостевая колонка
Последние комментарии
-
Joomla 3: Перенаправление на ту же страницу после авторизации
-
nt 31.12.2021 17:12
Today, I went to the beach with my children. I found a sea shell and gave it to my 4 year old daughter ...
-
https://yarabook.Com 28.12.2021 10:04
Have you ever considered writing an e-book or guest authoring on other blogs? I have a blog based ...
-
-
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments
-
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 ...
-
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 ...
-
mm 24.12.2021 22:41
Unquestionably imagine that that you said. Your favourite justification appeared to be on the internet ...
-
-
Joomla: Фильтруем контент по материалам, категориям и компонентам
-
Bailey 31.12.2021 01:59
If you desire to obtain a good deal from this post then you have to apply such strategies to your won ...
-
-
Кнопки социальных сетей в Joomla 2.5. Варианты от Яндекса и Pluso
-
flyff 21.04.2022 22:07
Thanks for finally talking about >Кнопки социальных сетей в Joomla 2.5. Варианты от Яндекса и Pluso
-
-
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments
-
home page 30.04.2022 12:56
Link exchange is nothing else but it is just placing the other person's website link on your page at ...
-
ql 31.12.2021 17:02
I like the helpful info you provide in your articles. I will bookmark your weblog and check again ...
-
Oscar 25.12.2021 15:18
Heya this is kinda of off topic but I was wanting to know if blogs use WYSIWYG editors or if you have ...
-
Комментарии
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,
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)
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
My web page: カップルペアセーター; ameblo.jp,
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]