Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JCommentsОпубликовано: 13.02.2017 13:23 Автор: Ogri Просмотров: 31405
Небольшая предыстория. Я изначально использовал родную капчу компонента 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-теги
Популярные
-
59495
Редактирование анимированных GIF-имиджей в Photoshop CS3 -
34255
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments -
31810
Единая фильтрация вывода модуля mod_jcomments_latest -
31405
Joomla: Интегрируем reCAPTCHA v2 (NO CAPTCHA) в JComments -
26531
Joomla: как добавить свои языковые константы или переопределить существующие
Авторизация
Гитара
Гостевая колонка
Последние комментарии
-
Joomla 3: Перенаправление на ту же страницу после авторизации
-
generic cialis 08.08.2022 15:52
I'm gone to inform my little brother, that he should also visit this web site on regular basis to ...
-
-
Joomla: Сливаем два сайта в один при помощи компонента J2XML
-
seo pricing packages 04.08.2022 17:07
%% my page: seo pricing packages ...
-
Enfield Doors 04.08.2022 12:15
You can find qualified professionals in Enfield Doors: https://stuffark.com/community/profile/halliehoad29470/ ...
-
-
Joomla: как добавить свои языковые константы или переопределить существующие
-
Duwayne 12.08.2022 00:13
Howdy! Do you use Twitter? I'd like to follow you if that would be ok. I'm absolutely enjoying your blog ...
-
-
Единая фильтрация вывода модуля mod_jcomments_latest
-
Claudia Schilling 11.08.2022 22:13
Great goods from you, man. I've understand your stuff previous to and you're just extremely great. I ...
-
-
Кнопки социальных сетей в Joomla 2.5. Варианты от Яндекса и Pluso
-
my blog 08.08.2022 04:40
This design is incredible! You obviously know how to keep a reader entertained. Between your wit and ...
-
my blog 06.08.2022 00:18
We are a group of volunteers and opening a new scheme in our community. Your site provided us with ...
-
-
Миграция с Joomla 1.5 на Joomla 2.5. Ч.2-1. Перенос jDownloads и jComments
-
denizli son dakika 08.08.2022 07:08
It's very simple to find out any topic on web as compared to textbooks, as I found thus piece of ...
-
-
Структура внутренних ссылок сайта на Joomla
-
mobic2all.top 11.08.2022 14:58
There iѕ definately a gгeat deal to find out about this topic. I realⅼy like all of tһe рoints yоu ...
-
lyrica2us.top 11.08.2022 08:22
Piece οf writing writing іs also ɑ excitement, if you knoԝ afterward үоu how can i get lyrica fοr ...
-
Комментарии
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]
многие люди всегда имеют массу семейных заморочек, и
{им} следует отвязываться.
Некто свершает это с приятелями, кто-то на занятиях,
а многие попросту захлопывается в жилой комнате и лазиет по
webу, навещая ходовые страницы сайтов.
Для последней группы я намереваюсь рекомендовать великолепный
романический веб сайт Сквирт - порно сайт, там Вас ожидают
качественные видосы с необычными барышнями разного
строения фигуры. Эти крали позволят выбросить из головы обыденные проблемы, по крайней мере на некое
время суток. Попросту прислушайтесь к моему совета и
заходите на названный наш портал, лично я даю слово, вы не усомнитесь.
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
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!
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
service. Do you have any? Please allow me know in order that I may subscribe.
Thanks.
Also visit my webpage - situs casino online
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
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
that's what this website is providing.
Feel free to surf to my site; antikbet
Also visit my web page qq
my page :: Antikbet
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
my homepage :: https://sipetra.id