
CrawlerDetect
Определение ботов по заголовкам запроса и защита форм от спама без CAPTCHA
- MODX 3
- PHP 8.2


PreHook FormIt: блокирует отправку, если библиотека считает запрос ботом. Без явного UA смотрит заголовки JayBizzle, не только User-Agent.
Добавьте хук в &preHooks FormIt. Прямой вызов [[!crawlerDetectBlock]] возвращает "1" / "0", как isCrawler.
Если сервис недоступен, хук возвращает true и форма уходит.
Другие preHooks перечислите через запятую: crawlerDetectBlock,другойХук.
crawlerDetectBlock до валидации и отправки.false, пишет fi.validation_error_message и $hook->addError('crawlerdetect', …).true.Текст задаётся в Системные настройки → crawlerdetect_block_message. По умолчанию: «Не удалось отправить форму. Попробуйте позже.»
В шаблоне формы выведите плейсхолдер FormIt:
[[+fi.validation_error_message]]{$modx->getPlaceholder('fi.validation_error_message')}[[!FormIt?
&preHooks=`crawlerDetectBlock`
&hooks=`email,redirect`
]]
[[+fi.validation_error_message]]
<form method="post">...</form>{$modx->runSnippet('FormIt', [
'preHooks' => 'crawlerDetectBlock',
'hooks' => 'email,redirect'
])}
{$modx->getPlaceholder('fi.validation_error_message')}
<form method="post">...</form>&preHooks=`crawlerDetectBlock,recaptcha`'preHooks' => 'crawlerDetectBlock,recaptcha'CrawlerDetect стоит первым в списке и отсечёт ботов до CAPTCHA.
crawlerDetectBlock в preHooks FormIt на этой странице. При блокировке ботом FetchIt получит ответ с ошибкой и покажет сообщение из настроек CrawlerDetect.si_path_to_presets). Добавьте в пресет 'preHooks' => 'crawlerDetectBlock'. При блокировке ботом SendIt вернёт ошибку и покажет сообщение из настроек CrawlerDetect. Подробнее: Интеграция → SendIt.crawlerDetectBlock в preHooks FormIt.