Сегодня я столкнулся с необходимостью для одного сайта на Битриксе сделать капчу в форму подписки. В этой записи я опишу весь процесс.
Для добавления капчи необходимо:
- Скопировать компонент sender.subscribe в своё пространство имён.
Мы будем добавлять в компонент проверку введённой капчи, а если редактировать исходный компонент sender.subscribe в пространстве имён bitrix, то при установке обновлений Битрикса есть риск потерять все свои изменения. - В шаблоне сайта заменить компонент bitrix:sender.subscribe на свой.
- Создать шаблон для своего компонента sender.subscribe.
Шаблон отвечает за вывод капчи, поэтому его мы тоже будем модифицировать.
Далее – самое интересное.
В шаблоне компонента добавляем генерирование капчи. Для этого помещаем в него следующий код:
// подключаем файл модуля капчи
include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/captcha.php");
// создаем объект капчи
$cpt = new CCaptcha();
// достаём значение параметра captcha_password из главного модуля
$captchaPass = COption::GetOptionString("main", "captcha_password", "");
// если строка пуста, генерируем случайное значение
If (strlen($captchaPass) <= 0) {
$captchaPass = randString(10);
COption::SetOptionString("main", "captcha_password", $captchaPass); }
$cpt->SetCodeCrypt($captchaPass);
Несмотря на то, что пролог уже подключён, без первой строчки не заработало.
Далее добавляем картинку капчи и поле для её ввода:
<input name="captcha_code"value="<?=htmlspecialchars($cpt->GetCodeCrypt());?>"type="hidden"> <img src="/bitrix/tools/captcha.php?captcha_code=<?=htmlspecialchars($cpt->GetCodeCrypt());?>"> <input id="captcha_word"name="captcha_word"type="text">
В коде компонента добавляем проверку:
if($APPLICATION->CaptchaCheckCode($_POST["captcha_word"], $_POST["captcha_code"])){
echo 'Всё верно!';
} else {
echo 'Неправильно введен код с картинки!';
}
Большое спасибо блогу yournet.kz за это решение.
