Простая каптча для formit на MODX Revo

Опубликовано: 10 Сен 2014

Позаимствованно отсюда.

Сниппет formit по умолчанию включает в себя функции для работы с reCaptcha, которая зачастую неустраивает ни разработчиков, ни заказчиков, поскольку вызывает затруднения у начинающих разработчиков, да и посетителям довольно сложно распознать два трудночитаемых слова. Поэтому возникает желание заменить ее на что-то более простое и легко настраиваемое.

Для решение этой проблемы использован мощный и распространенный сниппет Phpthumbof ( об этом плагине есть хорошая статья на habrahabr.ru/post/131424/). Задача  - разработать форму для получения в банке пластиковой карты MASTERCARD, поэтому решено вывести изображение этой карты с номером, который пользователь должен будет ввести в поле каптчи.

Для вывода картинки создал сниппет "rnd" со следующим содержанием:

<?php
//Создаем строку из 8 случайных цифр.
for($i=1; $i<=8; $i++)
{$r=rand(0, 9);
$rnd.=$r; $rndn.=$r;
if ($i==4){$rndn.=' ';}}
// Записываем их в сессию
$_SESSION['captcha']=$rnd;
// Переменную с пробелом выводим на картинку с помощью phpthumbof
return '<img title="Введите номер карты" src="[ [*capimg:phpthumbof=`w=140&h=90&zc=1&fltr[]=wmt|'.$rndn.'|10|BL|000000|10|90|15|0|5|15|`]]" alt="Каптча" />';

При вызове этого сниппета получим картинку с цифрами

 Для проверки создаем сниппет "checkCaptcha"

<?php
//Создаем строку из 8 случайных цифр.
$success = $value == $_SESSION['captcha'];
if (!$success) {
// Сообщение об ошибке при неправильном вводе.
$validator->addError($key,'Введен неправильный номер, попробуйте еще раз.');
}
return $success; 

Далее вызываем formit

[ [
!FormIt
&hooks=`spam,email,redirect`
&emailTpl=`EmailChunk`
&emailSubject=`Сообщение с сайта Web-мастер Danwez`
&emailTo=`admin@site.ru` &redirectTo=`2`
&validate=`captcha:checkCaptcha`
&customValidators=`checkCaptcha`
]]

А в форму добавляем вызов  каптчи

<div id="capt">
[ [!rnd]]
<label>Введите 8 цифр номер карты с картинки:</label>
<input value="" type="text" name="captcha" id="captcha" />
[ [!+fi.error.captcha]] </div>

Комментарии (0)


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: