Главная / Дополнения для modx / Капча для ajaxForm

scxcaptchaAjaxForm — капча для MODX AjaxForm и FormIt

Простая и быстрая капча для AjaxForm и FormIt. Без раздражающих картинок, с honeypot и тайм-защитой. Установка в один вызов.

  • v1.0.0
  • stable
  • MIT
Главная / Дополнения для modx / Капча для ajaxForm

Почему это удобно

🔢

Неблокирующая числовая CAPTCHA

Пять цифр, легко читается человеком, но защищает от ботов.

⚙️

Совместима с AjaxForm и FormIt

Работает через стандартные хуки MODX, без конфликтов с другими дополнениями.

🚀

Простая интеграция

Установите пакет, добавьте [ [!ScxCaptchaAjaxForm]] в форму — готово.

🧠

Умная защита

Проверка honeypot, времени заполнения и одноразовые токены.

🎨

Кастомизация внешнего вида

Меняйте стили классов .scx-* под свой дизайн или подключайте scx.css/js глобально.

🧩

Поддержка модалок и AJAX

Используйте includeAssets=inline для динамически подгружаемых форм.

Демо

tpl.demo.scx

!AjaxForm? &snippet=`FormIt` &form=`tpl.demo.scx` &hooks=`ScxCaptchaAjaxFormHook, email` &validate=`name:required, email:required:email, scx_code:required` ]]
⚠️ Важно: Этот пример не отправляет данные, просто показывает работу капчи.
Если требуется сделать реально рабочее демо — подключайте AjaxForm со сниппетом FormIt, как в «быстром старте»:

// лог появится здесь

Совместимость и требования

MODX: 2.8+ / 3.x
PHP: 7.4+ (рекомендуется 8.x)
Зависимости:
  • GD imagecreate + TrueType
  • TrueType font DejaVuSansMono.ttf
Работает с:
  • AjaxForm
  • FormIt
Проверено на версиях: последние релизы

Установка

Скачайте архив транспорт-пакета дополнения (scxcaptchaajaxform-1.0.0-pl.transport) с этой страницы.

Загрузите скачанный архив через админку сайта, или по FTP/SSH или через файловый менеджер хостинга в папку сайта:
/core/packages/
Файл не распаковывайте — MODX сделает это сам при установке.

/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`
]]

Если хотите подключить стили/скрипты один раз для всего сайта, добавьте в шаблон:

<link rel="stylesheet" href="/assets/components/scxcaptchaajaxform/scx.css">
<script src="/assets/components/scxcaptchaajaxform/scx.js"></script>

Быстрый старт

Минимальный пример интеграции

// вставить в чанк с формой
[[!ScxCaptchaAjaxForm]]


// Добавить хук  ScxCaptchaAjaxFormHook в снипет AjaxForm
[[!AjaxForm?
  &snippet=`FormIt`
  &form=`tpl.AjaxForm.example`
  &hooks=`ScxCaptchaAjaxFormHook, email`
  &validate=`name:required, email:required:email, scx_code:required`
]]

Капча вставляется некэшируемо в чанк tpl.AjaxForm.example ([[!!ScxCaptchaAjaxForm]]).
Работает с AjaxForm и FormIt.

Настройки и параметры

Имя
Тип
По умолчанию
Описание
ttl
integer
Время жизни токена в секундах. Пример: [[!ScxCaptchaAjaxForm? &ttl=`\900`]]
includeAssets
list
Как подключать CSS/JS: head — в (по умолчанию); inline — вернуть вместе с HTML (для модалок/AJAX); none — не подключать (если scx.css/js подключены глобально).
render
boolean
Возвращать ли HTML блока: 1 — да (по умолчанию); 0 — только ассеты.
Имя
Описание
Пример
scx_hp
Honeypot — поле-ловушка, должно оставаться пустым.
scx_ts
Время рендера формы (мс), простая анти-бот проверка (>= 3 сек).
scx_code
Ответ пользователя (ровно 5 цифр).
scx_token
Скрытый токен текущей капчи.
Ключ
Тип
По умолчанию
Описание

Примеры использования

Минимальная интеграция на статичной странице.

[[!!ScxCaptchaAjaxForm]]

[[!!AjaxForm?
  &snippet=`FormIt`
  &form=`tpl.AjaxForm.example`
  &hooks=`ScxCaptchaAjaxFormHook,email`
  &validate=`name:required,email:required:email,scx_code:required`
]]

Возвращаем CSS/JS вместе с HTML капчи для динамических вставок.

[[!ScxCaptchaAjaxForm? &includeAssets=`inline`]]

Подключаем scx.css/js без вывода самого блока.

[[!ScxCaptchaAjaxForm? &render=`0`]]

Если scx.css/js уже подключены глобально.

[[!ScxCaptchaAjaxForm? &includeAssets=`none`]]

FAQ

Убедитесь, что вызов капчи некэшируемо: &#91;&#91;!ScxCaptchaAjaxForm&#93;&#93;. Страница и captcha.php должны быть на одном хосте/поддомене. Для модалок используйте &includeAssets=inline или подключите scx.css/js глобально. Проверьте, что форма AjaxForm инициализирована (есть скрытый input af_action).

Добавьте &debug=1 к URL картинки (captcha.php?...&debug=1) — получите текст: session_name, cookie, requested token, allowed tokens.

scx_hp (honeypot), scx_ts (timestamp), scx_code (ответ, 5 цифр), scx_token (токен). Поле scx_hp должно оставаться пустым.

Переопределяйте классы .scx-captcha, .scx-img, .scx-refresh, .scx-input, .scx-hp в своём CSS или подключите глобально scx.css.

Готовы попробовать?

Лицензия: MIT. Поддержка: info@sait-modx.by.

История изменений

1.0.0
Как бы Вы хотели связаться?

Связь с нами