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