Новая Google reCAPTCHA(v2) для FormIt

Наткнулся на дополнение ReCaptchaV2, позволяющее добавить новую капчу в FormIt.
Подробнее о новой reCAPTCHA здесь.
Для начала нужно сгенерировать API ключ для домена https://www.google.com/recaptcha/admin и добавить его в System Settings.
Пример использования
[[!FormIt?
&hooks=`recaptchav2,email`
...
]]
<div class="form-item">
[[!recaptchav2_render]]
[[!+fi.error.recaptchav2_error]]
</div>Проект на GitHub: https://github.com/sepiariver/recaptchav2
Пакет: http://modx.com/extras/package/recaptchav2
Комментарии: 66
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Что бы работало с AjaxForm сделал так: в &validate добавил g-recaptcha-response:required.
А в чанк с формой добавил
Все завелось и работает)
https://github.com/bvandorp/noCaptcha
Была проблема с ее использованием в AjaxForm. После того, как снова вызывалась форма отправки, капча была валидна, но письмо не отправлялось, т.к. содержала ошибку капчи. Решил добавлением:
если
Далее копируем дефолтный скрипт assets/components/ajaxform/js/default.js и добавляем свой код:
Либо дописываем прямо в дефолтном скрипте, тогда и &frontend_js не нужно писать.
Сейчас подставил в правильное место (пока прямо в изначальный скрипт) — но эффект тот же.
Но как оказалось не везде — а только на главной странице сайта.
На внутренних страницах все отлично работает.
На главной же После первой отправки формы и обновлении страницы перестает подгружаться default.js joxi.ru/12MQYYeTGl8y2J
ну попробуйте задать кастомный скрипт (&frontend_js).
если не поможет, то скиньте ссылку на главную страницу сайта.
На главной даже после закрытия браузера и открытия снова скрип не подгрузился.
Вот ссылка www.pit-sport.ru/
А после отправки сообщения и перезагрузки страницы опять не грузится скрипт joxi.ru/82Q7QQeTbwpkrd
тем не менее, у меня даже после первой загрузки главной ajaxform не подключился. скорее всего вы formit используете на главной.
Сейчас покопаюсь — может я что-то упустил
На каждой странице грузится модальное окно с вызовом AjaxForm
В AjaxForm по умолчанию отправка происходит через Formit.
Проверил на другом сайте, где все настроено подобным образом — там все ОК с отправкой с главной страницы.
Буду разбираться
Кто-нибудь может сталкивался?
В двух словах: капчу в форме нужно будет рендерить не с помощью сниппета [[recaptchav2_render]], а вставляя в каждую форму div (или другой элемент) с определенным ID, после чего самому прописать строчку загрузки API капчи, и рендерить капчу для каждого div'а из скрипта, повешенного на onload. Все это расписано в статье по ссылке выше, плюс есть пример. В случае с MODX пришлось написать однострочный сниппет, который вытаскивает из системных настроек значение recaptchav2.site_key Правда ничто не мешает прописать этот ключ напрямую в JS-скрипте.
У меня все заработало.
Кстати, капча работает замечательно, спам прекратился.
отчего в письме в конце это?:
g-recaptcha-response: 03AHJ_VusMeoUk5UNuhhvDVwGROt8lTtD8V11R7u3y6ufTairGV4u8Do_3lKSbZGIlMF9kgF0H8yzrTmQjHmAj_HD1jSagBKMya8ipeK3lLkjv9hwqMlOM… вырезан длинный код
Либо через лексиконы.
А как это через лексиконы?
Какой ключ куда вставлять? http://prntscr.com/8lg8k2
В шапке я посмотрел апи гугла вызывается упорно дважды. Но нету ни где второго вызова.
По итогу с последним FormIt и Ajaxform не работает
Вы бы не могли описать как настроить мультикаптчу? У меня на странице их 3 штуки. Вроде прописал через id и скрипт прикрепил, но что-то они совсем не появляются. Спасибо!
developers.google.com/recaptcha/docs/display#config
Как минимум, будут полезны темная тема data-theme или компактный вид data-size.
если убрать recaptcha то форма работает корректно.
[2018-05-08 14:05:54] (ERROR @/public_html/core/components/formit/src/FormIt/Request.php: 87) [FormIt] Невозможно загрузить класс reCaptcha.
ждем апгрейда, а пока там есть костыль
Там дело в чем — formIt проверяет функцией strpos (вроде ей или типа нее, недели две назад как раз тоже самое было — разбирался, как раз в обновленном formIt), присутствует ли в hooks слово recaptcha, если присутствует — пытается загрузить свои классы для рекапчи — а там ошибка возникает, не вдавался уже в детали, некогда было.
а там в самом hasHook — return strpos($this->config['hooks'], $hook) !== false;
а сам вызов if ($this->formit->hasHook('recaptcha')) {… — тут подключаются классы рекапчи от formIt
[2018-06-13 10:59:43] (ERROR @ /home/vgl/antalyaelitestroy.com/www/core/components/formit/src/FormIt/Request.php: 87) [FormIt] Невозможно загрузить класс reCaptcha.
[2018-06-13 11:02:26] (ERROR @ /home/vgl/antalyaelitestroy.com/www/core/components/formit/src/FormIt/Request.php: 87) [FormIt] Could not load FormItReCaptcha service class.
Код вывода формы:
В чанке partners-form добавлены эти строки:
Подскажите пожалуйста, в чем может быть проблема?
Подскажите, пожалуйста, как сделать поле капчи обязательным?
Если отправить заявку без отметки капчи, то форма не отправляется и редиректится на ошибочную страницу.
Код:
По идее в цепочке хуков email,recaptchav2,FormItSaveForm,redirect, если капча не проходит, до редиректа дойти не должно… поэтому редирект на ошиб. страницу кажется странным. Само использование капчи делает ее обязательной, без нее вы ничего не должны отправить, если конечно все настроено верно. Да,email хук у вас идет первым, поэтому письмо таки улетит до остальных проверок.
Скриптов для обработки сабмита нет…
Сама форма: