Разработчики модуля reCAPTCHA восьмой год не могут заставить работать капчу на ajax формах. Проблема в следующем — при перезагрузке формы с помощью AJAX капча пропадает, поскольку модуль никак не реагирует на подгрузку динамического контента. Фиксим самостоятельно:
Drupal 8
Появился рабочий патч (как его установить)
Создаём модуль, добавляем в него следующие файлы:
recaptcha-ajax.js
(function (Drupal, $) {
Drupal.behaviors.recaptchaAjax = {
attach: function attach(context, settings) {
if ('grecaptcha' in window && context !== document) {
$('.g-recaptcha:empty', context).each(function () {
grecaptcha.render(this, $(this).data());
});
}
}
};
})(Drupal, jQuery);
MODULENAME.libraries.yml
recaptcha-ajax:
js:
https://www.google.com/recaptcha/api.js: {type: external}
recaptcha-ajax.js: {}
MODULENAME.module
/**
* Preprocess function for captcha.html.twig.
*/
function MODULENAME_preprocess_captcha(array &$variables): void {
if (
isset($variables['element']['#captcha_validate']) &&
$variables['element']['#captcha_validate'] == 'recaptcha_captcha_validation'
) {
$variables['#attached']['library'][] = 'mymodule/recaptcha-ajax';
}
}
Включаем модуль.
Drupal 7
(function (Drupal, $) {
Drupal.behaviors.recaptchaAjax = {
attach: function (context, settings) {
if ('grecaptcha' in window && context !== document) {
$('.g-recaptcha:empty', context).each(function () {
grecaptcha.render(this, $(this).data());
});
}
}
};
})(Drupal, jQuery);
Если форма подгружается при нажатии на ссылку, то дополнительно нужно в конструкторе формы подключить скрипт рекапчи:
drupal_add_js('https://www.google.com/recaptcha/api.js', array('type' => 'external'));
Написанное актуально для
reCaptcha 7.x-2.2, reCaptcha 8.x-2.3
Комментарии
Огромное спасибо а то обыскался, думал уже не найду решение проблемы! Я то новичок в друпале, переучиваюсь с джумлы =)) Кстати если кого интересует обновление recaptcha до v2 на joomla 2.5 то вот информация http://recaptcha-v2.seochebspec.ru/ , ведь в эта версия движка больше не поддерживается и всё самому надо поменять
Спасибо, очень помог!
Я уже думал что надолго залипну с этой проблемой :)
Спасибо, очень помогают Ваши советы.
Подскажите. Для друпал 7 в какой файл код вставлять?
В любой js.
Если закрыть модальное окно и открыть повторно, то капчи уже нет. Как исправить?
Спасибо! Среди кучи патчей лучшее и самое простое решение для reCaptcha второй версии. В версии 7.x-2.3 тоже работает.
Подскажите, для 8 это свой модуль делать? Просто показывается ошибки,если делаешь модулем.
Чтобы я без тебя делал, дружище! Спасибо тебе за всё!
Спасибо, помогло
Спасибо!
Под 9 Drupal актуально - ReCaptcha Версия: 8.x-3.0
А в какой папке нужно создать эти файлы? Требуется как то через админку его активировать?
Добавить комментарий