Drupal → Фиксим вывод reCaptcha на AJAX формах

28.08.2017

Разработчики модуля 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
Похожие записи

Комментарии

Дмитрий
20.01.2018, 11:56

Огромное спасибо а то обыскался, думал уже не найду решение проблемы! Я то новичок в друпале, переучиваюсь с джумлы =)) Кстати если кого интересует обновление recaptcha до v2 на joomla 2.5 то вот информация http://recaptcha-v2.seochebspec.ru/ , ведь в эта версия движка больше не поддерживается и всё самому надо поменять

Гость
02.05.2018, 18:07

Спасибо, очень помог!
Я уже думал что надолго залипну с этой проблемой :)

Спасибо, очень помогают Ваши советы.

Подскажите. Для друпал 7 в какой файл код вставлять?

Если закрыть модальное окно и открыть повторно, то капчи уже нет. Как исправить?

Спасибо! Среди кучи патчей лучшее и самое простое решение для reCaptcha второй версии. В версии 7.x-2.3 тоже работает.

Гость
29.11.2019, 11:15

Подскажите, для 8 это свой модуль делать? Просто показывается ошибки,если делаешь модулем.

Константин Корепин
16.01.2020, 14:08

Чтобы я без тебя делал, дружище! Спасибо тебе за всё!

Михаил
18.02.2021, 03:11

Спасибо!
Под 9 Drupal актуально - ReCaptcha Версия: 8.x-3.0

Сергей
12.01.2023, 04:16

А в какой папке нужно создать эти файлы? Требуется как то через админку его активировать?

Добавить комментарий