Подключение нескольких recaptcha2 в Битриксе
, МихаилЕсть несколько способов подключения и инициализации рекапч, но самый удобный это тот, который занимает мало строчек кода, и максимально эффективен.
В init.php добавляем код, инициализирующий рекапчу. Код добавляется структурно после подключения всех стилей и скриптов, что исключает ошибку раннего старта рекапчи. Код добавляется именно через addString(), а не через addScript():
<?php // Открытый ключ define("DVS_RC_KEY","123"); // Секретный ключ define("DVS_RC_SECRET","321"); use Bitrix\Main\Page\Asset; use Bitrix\Main\Page\AssetLocation; if (!defined("DVS_RECAPTCHA")) { // Подключаем скрипт рекапчи Asset::getInstance()->addString('<script src="//www.google.com/recaptcha/api.js?onload=divaCaptchaRender&render=explicit" async defer></script>', true, AssetLocation::AFTER_JS); // Инициализируем массив рекапч Asset::getInstance()->addString("<script>window.rc = {}; var divaCaptchaRender = function () { $('.g-recaptcha').each(function() { window.rc[$(this).attr('id')] = grecaptcha.render( this,{ 'sitekey': '" . DVS_RC_KEY . "', 'theme': 'light'} ); }); }; </script>", true, AssetLocation::AFTER_JS); define("DVS_RECAPTCHA", true); } ?>
Дальше мы можем обращаться из любого компонента к объекту рекапчи, которые находятся в массиве window.rc.
Вставка рекапчи:
<?php <div id="recaptchaUID" class="g-recaptcha"></div> ?>
Сброс рекапчи:
<?php <script>grecaptcha.reset(window.rc[recaptchaUID]); </script> ?>
Тем самым не зная точно сколько рекапч будет на странице, мы можем работать с ними по идентификатору дива (в данном случае это recaptchaUID), в котором эта капча инициализировалась по классу g-recaptcha.