По мере роста популярности сайта перед каждым владельцем неизбежно встает проблема борьбы со спамом. В этой статье я постараюсь собрать все возможные способы по решению этого вопроса в joomla и virtuemart.
Начнем со стандартной капчи, а в конце поговорим про её альтернативу - облачный антиспам.
Настройка reCAPTCHA для joomla
В Система > Общие настройки > Сайт выберем капчу по умолчанию.
В Менеджере плагинов активируем плагин CAPTCHA - reCAPTCHA.
Для активации плагина нужно получить публичный и приватный ключи для домена. Для этого зарегистрируем сайт по этой ссылке.
После регистрации сервис сгенерирует ключи
Добавляем ключи в настройки плагина.
С недавних пор у google появился новый тип невидимой капчи (Invisible reCAPTCHA), которая проверяет пользователя в фоновом режиме и показывается только если система "что-то заподозрит". Данный тип капчи пока не поддерживается joomla, поэтому используем reCAPTCHA V2.
Настройка капчи при регистрации
Если используется стандартная регистрация joomla, то в Пользователи > Менеджер пользователей > Настройки > Параметры пользователя выбираем reCAPTCHA.
Все будет работать правильно, чего не скажешь об использовании капчи при регистрации в virtuemart.
Если в Virtuemart > Настройки > Магазин активировать опцию Использовать ReCaptcha для Регистрации, то капча на странице регистрации появится, но если пользователь забудет ее активировать и попытается зарегистрироваться, то произойдет редирект на другую страницу. Этот вопрос поднимался на оф. форуме, но решения так и не было найдено, поэтому лучше либо не использовать капчу при регистрации пользователей в virtuemart, либо использовать плагин cleantalk, о котором чуть позже.
Настройки капчи для отправки рекомендаций
Чтобы добавить капчу в форму рекомендаций и вопроса по товару в Virtuemart > Настройки > Внешний вид активируйте опцию Использовать ReCaptcha для отправки рекомендаций и 'Задать вопрос'.
Настройка капчи для JComments
Если на сайте для вывода отзывов о товаре используется jcomments, то добавить капчу можно в Компоненты > JСomments > Настройки > Вид. После этого во вкладке Права активируем ее для разных групп пользователей.
По умолчанию используется kcaptcha, которая требует от пользователя ввода текста с картинки в отдельном поле.
Для настройки более дружественной для пользователей recaptcha от google нужно внести несколько изменений в файлы jcomments.
В файле /components/com_jcomments/tpl/default/tpl_form.php заменим
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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 } } ?> |
на
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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 } } } ?> |
В файле /components/com_jcomments/jcomments.ajax.php заменим
1 2 3 |
$captchaEngine = $config->get('captcha_engine', 'kcaptcha'); if ($captchaEngine == 'kcaptcha') { |
на
1 2 3 4 5 6 7 8 9 10 11 12 |
$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 if ($captchaEngine == 'kcaptcha') { |
В Расширения > Менеджер языков > Переопределение констант добавим новую языковую константу
1 |
ERROR_RECAPTCHA_V2 = "Пожалуйста, подтвердите, что вы не робот!" |
Кроме этого нужно включить и настроить плагин reCAPTCHA, как это описано в начале статьи.
В результате форма для отзывов будет иметь следующий вид.
Облачный антиспам Cleantalk
Пожалуй, самый простой и эффективный способ по борьбе со спамом на сайте. Просто устанавливаем плагин и получаем защиту для всех форм на сайте и при этом обычному пользователю не нужно заполнять никакую капчу.
Перед публикацией данные пользователя в фоновом режиме проверяются по базе спам ботов. Если "все хорошо", то идет публикация, иначе публикация блокируется.
Плагин уже несколько лет работает на этом блоге и за время работы заблокировал более 20 000 спам регистраций и комментариев.
После установки в настройках плагина Анти-спам от CleanTalk нужно ввести ключ доступа. Для получения ключа регистрируемся по этой ссылке и копируем ключ.
Смысл настроек плагина понятен из названия
Cleantalk блокирует спам в:
- virtuemart
- jcomments
- формах обратной связи и формах регистрации
Вся статистика доступна в личном кабинете пользователя.
Сервис платный, но свои задачи решает на 100%.
vskuchmak
спасибо, актуально и полезно
admin
Рад, что статья оказалась полезной.
Garmon85
К сожалению после ajax подгрузки соседних товаров recaptcha не появляется и форму уже не отправить без f5...
Garmon85
Сам спросил, сам отвечаю, для инициализации капчи и возможности комментирования нужно добавить следующий код
в функцию Virtuemart.updateContent = function(url, callback) {
в файле /components/com_virtuemart/assets/js/dynupdate.js
Garmon85
даже проще работает!
admin
Спасибо, что поделились.
Mich
Подскажите, как подключить обработку плагинов в настраиваемое поле? Хочу вывести галерею с помощью плагина simple gallery, но в настраиваемых полях обращение к плагину не обрабатывается.
Mich
Сам задал, сам отвечаю)
Нужно в выводе поля подключить content.prepare вот так:
echo JHtml::_('content.prepare', поле);
admin
Спасибо, что поделились.
Алексей
Спасибо за решение!
К сожалению, капча не работает, если Форма добавления комментариев скрыта. Она просто не загружается при клике на "Добавить комментарий". Единственный рабочий вариант при открытой Форме добавления комментариев, но меня это не устраивает.
Поигрался и откатился на КСАРТСНА... ((
admin
Да, recaptcha при скрытой форме не работает. Как вариант, можно скрывать и показывать форму не в настройках jcomments, а написать свой небольшой скрипт. Готового решения не предложу, но сделать в теории не очень сложно.
Алексей
Я тоже об этом подумал.
Как вариант, можно загружать форму в модальном окне Bootstrap...
fred
У меня форма для отзывов уже с Капча от гугл. Хотя в код не лез и ничего не менял.
admin
Видимо, у Вас сторонний шаблон, в котором уже все настроено.
fred
Нет, Ваш шаблон. TrendShop.
fred
Нет, Ваш шаблон. TrendShop.
P.S. Не обратил внимания, что ветка открытая. Читал ее из Инструкции в разлеле шаблона.
Good-year
Почему то у меня не показывает каптчу в задать вопрос. опция Использовать ReCaptcha для отправки рекомендаций и 'Задать вопрос' активна
admin
Опция Разрешить не вошедшему на сайт посетителю отправлять рекомендации или задавать вопросы активна?
Good-year
Была не активна, включил, заработало. Спасибо
admin
Хорошо.
Good-year
В форме задать вопрос, если забыть про каптчу, то выдает такую ошибку.
[url=https://radikal.ru][img]https://c.radikal.ru/c07/1904/5a/14466f348a92.jpg[/img][/url]
так и должно быть или должно быть?
admin
Скорее всего, это баг virtuemart.
Нужно еще потестировать на чистой версии.
Смогу сделать это в начале следующей недели, по результатам отпишусь в теме.
admin
Да, это баг virtuemart.
В новой версии joomla появилась новая невидимая капча от google.
В Менеджере плагинов активируйте и настройте плагин CAPTCHA - невидимая reCAPTCHA.
В Система > Общие настройки > Сайт смените тип капчи в опции CAPTCHA (по умолчанию).
Good-year
CAPTCHA - невидимая reCAPTCHA. у меня такого плагина нет. Virtuemart 3.4.5
Good-year
Joomla!, 3.9.4.
admin
Может называть на английском.

Good-year
А я искал в установленных. невидимая это значит форма каптчи не будет появляться? как узнать что она работает. и как обстоят дела с этой каптчей при регистрации пользователей virtuemart?
admin
Попробуйте ее настроить и посмотреть будут ли регистрироваться боты.
Я пока ее не тестировал, точно сказать не могу.
7Hogik
Cleantalk плагин не позволяет воспользоваться корзиной ""Шаблон AirShop". Добавил в исключение: https://www.oil02.ru/cart.html. Не помогло
Василиса
Отличный сайт, отличная статья. Огромное спасибо!