Неблокирующая числовая CAPTCHA
Пять цифр, легко читаются человеком, не мешают заполнению формы и надёжно защищают от автоматических отправок.
Заявка принята!
Спасибо!
Ваше сообщение отправлено!
Лёгкая и быстрая капча для MODX, работает с AjaxForm, FormIt и FetchIt. Простой код, одноразовые токены. Устанавливается в один вызов.
Пять цифр, легко читаются человеком, не мешают заполнению формы и надёжно защищают от автоматических отправок.
Работает через стандартные хуки MODX — AjaxForm, FormIt и теперь FetchIt. Никаких конфликтов с другими дополнениями и сторонними фронтенд-скриптами.
Установите пакет и вставьте вызов
Проверка honeypot-поля, времени заполнения формы, одноразовые токены и защита от повторных отправок — всё работает автоматически.
Меняйте стили классов .scx-* под свой дизайн или подключайте scx.css/scx.js глобально. Поддерживается inline-режим для модальных и динамических форм.
Используйте includeAssets="inline" — скрипты и стили будут подключаться прямо внутри формы. Подходит для всплывающих окон, чанков и подгружаемых фрагментов.
После успешной или неудачной отправки капча перерисовывается автоматически, без ошибок «Bad token». Поддерживает события fetchit:success, fetchit:error и fetchit:reset.
Этот пример демонстрирует подключение капчи в чанк формы и не отправляет данные — он нужен только для показа работы капчи.
Чтобы сделать рабочее демо, подключайте AjaxForm со сниппетом FormIt, как показано в «Быстром старте».
// лог появится здесь
Скачайте архив транспорт-пакета дополнения версии 1.0.1 с этой страницы и сохраните его на компьютер.
Загрузите скачанный файл в директорию:
/core/packages/your-package.transport.zip
/core/packages/your-package.transport.zip
-- Зайдите в панель MODX: Приложения → Установщик
-- Нажмите на птичку кнопки ЗАГРУЗИТЬ ПАКЕТЫ , в появившемся меню выбирите ИСКАТЬ ПАКЕТЫ ЛОКАЛЬНО
-- В появившемся модальном окне нажмите ДА
-- В списке ниже выберите дополнение scxcaptchaajaxform и нажмите УСТАНОВИТЬ
-- Далее следуйсте инструкциям по установке
Убедитесь, что существует файл TTF-шрифта:assets/components/scxcaptchaajaxform/fonts/DejaVuSansMono.ttf
Если его нет — будет использован bitmap-фолбэк (капча всё равно работает).
assets/components/scxcaptchaajaxform/fonts/DejaVuSansMono.ttf
Добавьте вызов капчи в вашу форму некэшируемо и подключите хук проверки.
// вставить в чанк с формой
[[!ScxCaptchaAjaxForm]]
// добавить хук ScxCaptchaAjaxFormHook в снипет AjaxForm
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.AjaxForm.example`
&hooks=`ScxCaptchaAjaxFormHook, email`
&validate=`name:required, email:required:email, scx_code:required`
]]
// добавить хук ScxCaptchaAjaxFormHook в снипет Fetchit
[[!Fetchit?
&snippet=`FormIt`
&form=`tpl.AjaxForm.example`
&hooks=`ScxCaptchaAjaxFormHook, email`
&validate=`name:required, email:required:email, scx_code:required`
]]
Если вы хотите подключить стили и скрипт для всех форм сразу, поместите эти теги в шаблон сайта (например в <head>).
<link rel="stylesheet" href="/assets/components/scxcaptchaajaxform/css/scx.css">
<script src="/assets/components/scxcaptchaajaxform/js/scx.js"></script>
Если форма открывается в модальном окне или подгружается динамически — используйте inline-режим.
Он вставляет стили и JS прямо в форму.
[[ScxCaptchaAjaxForm?
&includeAssets=`inline`
]]
Минимальный пример интеграции
// вставить в чанк с формой
[[!ScxCaptchaAjaxForm]]
<!-- AjaxForm -->
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.demo.scx`
&hooks=`scxCaptchaAjaxFormHook,email`
&validate=`name:required, email:required:email, scx_code:required`
]]
<!-- FormIt (чистый вариант) -->
[[!FormIt?
&form=`tpl.demo.scx`
&hooks=`scxCaptchaAjaxFormHook,email`
&validate=`name:required, email:required:email, scx_code:required`
]]
<!-- FetchIt (динамическая форма) -->
<form data-fetchit>
[[!ScxCaptchaAjaxForm? &includeAssets=`inline`]]
<input type="text" name="name" placeholder="Имя">
<input type="email" name="email" placeholder="E-mail">
<button type="submit">Отправить</button>
</form>
Капча вставляется некэшируемо в чанк формы ([[!ScxCaptchaAjaxForm]]).
Пример работает с AjaxForm, FormIt и FetchIt. В inline-режиме капча подходит для модальных и динамически подгружаемых форм.
ttlincludeAssetsrenderscx_hpscx_tsscx_codescx_tokenno_system_settingsМинимальная интеграция на статичной странице. Ассеты подключаются автоматически в
(по умолчанию).[[!ScxCaptchaAjaxForm]]
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.AjaxForm.example`
&hooks=`scxCaptchaAjaxFormHook,email`
]]
Форма открывается во всплывающем окне или подгружается по AJAX. Стили и скрипт капчи возвращаются вместе с HTML формы.
[[!ScxCaptchaAjaxForm?
&includeAssets=`inline`
]]
[[!AjaxForm?
&snippet=`FormIt`
&form=`tpl.AjaxForm.modal`
&hooks=`scxCaptchaAjaxFormHook,email`
]]
Подключаем CSS/JS капчи, но не выводим HTML-блок. Полезно, если разметка капчи вставляется вручную или через отдельный чанк.
[[!ScxCaptchaAjaxForm?
&render=`0`
]]
Ассеты подключаются в шаблоне сайта, а сниппет отвечает только за HTML капчи. Удобно, когда капча используется на многих страницах.
<!-- В шаблоне (head) -->
<link rel="stylesheet" href="/assets/components/scxcaptchaajaxform/css/scx.css">
<script src="/assets/components/scxcaptchaajaxform/js/scx.js"></script>
<!-- В чанке формы -->
[[!ScxCaptchaAjaxForm?
&includeAssets=`none`
]]
Форма отправляется через FetchIt. Капча автоматически перерисовывается по событиям fetchit:success, fetchit:error и fetchit:reset.
<form data-fetchit>
<!-- Поля формы -->
[[!ScxCaptchaAjaxForm?
&includeAssets=`inline`
]]
<button type="submit">Отправить</button>
</form>
Убедитесь, что вызов капчи не кэшируется:
[[!ScxCaptchaAjaxForm]]
Страница и captcha.php должны быть на одном домене.
В 1.0.1 улучшена логика: токен очищается корректно, и капча перерисовывается без ошибок.
Убедитесь, что вызов капчи не кэшируется:
[[!ScxCaptchaAjaxForm]]
Страница и captcha.php должны быть на одном домене.
В 1.0.1 улучшена логика: токен очищается корректно, и капча перерисовывается без ошибок.
Обязательные поля:
scx_hp — honeypot (должно быть пустым)
scx_ts — время рендера (timestamp)
scx_code — ответ пользователя (5 цифр)
scx_token — токен текущей капчи
Все эти поля генерирует сниппет автоматически.
Переопределяйте классы в своём CSS:
.scx-captcha, .scx-img, .scx-refresh, .scx-input, .scx-hp
Или подключайте scx.css глобально.
Для модалок используйте &includeAssets="inline".
Связь с нами