
PhoneSpamDetect
Валидация телефонов в формах MODX через Google libphonenumber — локально, без API-ключей


PreHook для FormIt. Не пускает форму дальше, если телефон невалидный или страна не из белого списка. Пользователь видит текст из phonespamdetect_block_message.
Добавьте phoneSpamBlock в preHooks. Уже есть другие хуки — через запятую: phoneSpamBlock,другойХук.
fi.validation_error_message, дальше FormIt не идёт.| Параметр | По умолчанию |
|---|---|
| phoneField | phonespamdetect_phone_field (обычно phone) |
Меняется в Системные настройки → phonespamdetect_block_message. Дефолт: «Не удалось отправить форму. Укажите другой номер телефона.»
В шаблоне:
[[+fi.validation_error_message]]{$modx->getPlaceholder('fi.validation_error_message')}[[!FormIt?
&preHooks=`phoneSpamBlock`
&hooks=`email,redirect`
&validate=`name:required,phone:required,email:required:email`
]]
[[+fi.validation_error_message]]
<form method="post">
<input type="tel" name="phone" value="[[+fi.phone]]" />
...
</form>{$modx->runSnippet('FormIt', [
'preHooks' => 'phoneSpamBlock',
'hooks' => 'email,redirect',
'validate' => 'name:required,phone:required,email:required:email'
])}
{if $modx->getPlaceholder('fi.validation_error_message')}
<div class="error">{$modx->getPlaceholder('fi.validation_error_message')}</div>
{/if}
<form method="post">
<input type="tel" name="phone" value="{$modx->getPlaceholder('fi.phone')}" />
...
</form>[[!FormIt?
&preHooks=`phoneSpamBlock`
&phoneField=`mobile`
&validate=`mobile:required`
]]{$modx->runSnippet('FormIt', [
'preHooks' => 'phoneSpamBlock',
'phoneField' => 'mobile',
'validate' => 'mobile:required'
])}&preHooks=`crawlerDetectBlock,phoneSpamBlock,recaptcha`'preHooks' => 'crawlerDetectBlock,phoneSpamBlock,recaptcha'Сначала бот, потом телефон, потом капча.
FetchIt — phoneSpamBlock в FormIt на той странице, куда летит запрос.
SendIt — 'preHooks' => 'phoneSpamBlock' в пресете. Подробнее.
AjaxForm — сработает, если на сервере форма всё равно обрабатывается FormIt.