[YaCaptcha] - яндекс каптча.
Сервис Яндекс.Чистый веб предназначен для борьбы со спамом в текстовых сообщениях, размещаемых пользователями и автоматическими роботами на страницах сайтов, форумов и пр.
Сервис позволяет обнаруживать спам-сообщения и формировать графическую CAPTCHA для отклонения запросов от роботов.

Реализовано три метода — обнаружение спама, получение CAPTCHA, проверка введённой CAPTCHA.
Для удобства все оформлено в пакет [YaCaptcha].
Простейший пример работы с [ajaxForm] тут demo.vgrish.ru/yacaptcha.html
настройки пакета
— Идентификатор id каптчи
— Ключ API «Чистый Веб»
— Идентификатор id сообщения если проводилась его проверка на спам
— Тип каптчи
— Адрес сервиса

чанк tpl.YaCaptcha.block
Доступны параметры:
— captchaType — тип каптчи
— link — адрес запроса на каптчу
— onlyCaptcha — показывать сразу каптчу (да)

пример сниппета
Спасибо за внимание.
Пакет доступен в репо Simple Dream на бесплатной основе.
Сервис позволяет обнаруживать спам-сообщения и формировать графическую CAPTCHA для отклонения запросов от роботов.

Реализовано три метода — обнаружение спама, получение CAPTCHA, проверка введённой CAPTCHA.
Для удобства все оформлено в пакет [YaCaptcha].
Простейший пример работы с [ajaxForm] тут demo.vgrish.ru/yacaptcha.html
настройки пакета
— Идентификатор id каптчи
— Ключ API «Чистый Веб»
— Идентификатор id сообщения если проводилась его проверка на спам
— Тип каптчи
— Адрес сервиса

чанк tpl.YaCaptcha.block
Доступны параметры:
— captchaType — тип каптчи
— link — адрес запроса на каптчу
— onlyCaptcha — показывать сразу каптчу (да)

пример сниппета
// подключаем 'yacaptcha'
$yacaptcha = $modx->getService('yacaptcha');
// значение каптчи с формы передаем в конфиг
$yacaptcha->config['captcha'] = $_POST['yacaptcha'];
// проверка
$yacaptcha->afterValidate();
// если каптча неверна то
if ($yacaptcha->getIsCaptchaRequired()) {
return $AjaxForm->error('Неправильная каптча', array('yacaptcha' => 'Неправильная каптча'));
}Спасибо за внимание.
Пакет доступен в репо Simple Dream на бесплатной основе.
Комментарии: 38
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Кстати, интересный аналог от Гугл недавно появился: www.google.com/recaptcha/intro/index.html
АндрейПростите за невежество. Не совсем понял как подключить снипет. Чанк вывел всё отлично работает, но пока не проверяется. Используется форма под Formit
и в сниппете yaCaptchaСheck сделать проверку
Теперь капча проверяется, но нет результатов — нет отправки и редиректа на избранную страницу, и нет ошибки о неправильной капче. Просто возврат на ту же страницу с формой. Капчу добавил в форму через чанк. Пробовал с работающей формой — тот же результат. Без проверки через указанный сниппет всё отлично отправляется. Настраивал капчу согласно вашей инструкции, получил валидный ключ с Яндекс-сервиса.
нет ошибки о неправильной капче
добавить в чанк tpl.YaCaptcha.block, я проглядел…
нет отправки и редиректа на избранную страницу
хук для формит должен возвращать либо false — ошибка, либо true — все хорошо и идет дальнейшая обработка.
поэтому добавь в пример, в самый конец
будет вот так
и думаю будет работать…
Благодарю :)
Что же делать с остальными формами на странице?
Спасибо.
Нашел баг.
Если Якапчу использовать с AjaxForm, как в примере, и выставить в вызове AjaxForm проверку полей &validate=`email:required,message:required`, то в случае не заполнения одного из полей, после попытки неудачной отправки формы, будет постоянно выдаваться ошибка "[FormIt] Произошла ошибка при попытке отправить почту. Could not instantiate mail function." То есть после первой неудачной попытки из-за незаполненного поля, форма больше не отправится до перезагрузки страницы.
Если из формы капчу убрать, то всё норм работает.
Если форм несколько, то сведения об ошибке выведутся только в форме с префиксом fi.
Что же делать с остальными формами на странице?
Спасибо.
К примеру, [[+fo.error.yacaptcha]] — ничего не покажет, а сообщение об ошибке сработает только в форме с плейсхолдером +fi.
Нормально работает с AjaxForm, кстати