
- MODX 3
- PHP 8.2


crawlerDetectBlock до валидации и отправки.isCrawler считает запрос ботом (заголовки JayBizzle, не только User-Agent), форма не обрабатывается. Показывается сообщение из настройки.Сервис в PHP: $modx->services->get('CrawlerDetect\\CrawlerDetectService'). Методы: isCrawler($ua = null) и getMatches(). Без класса в vendor метод возвращает false без записи в журнал.
Добавьте crawlerDetectBlock в &preHooks FormIt. Другие preHooks перечислите через запятую.
&preHooks=`crawlerDetectBlock,другойХук`'preHooks' => 'crawlerDetectBlock,другойХук'FetchIt обрабатывает формы через FormIt на сервере.
&preHooks=`crawlerDetectBlock` .crawlerdetect_block_message.SendIt обрабатывает формы через FormIt. Параметры задаются в пресетах (файл из настройки si_path_to_presets).
core/components/sendit/presets/sendit.inc.php: при обновлении SendIt он перезаписывается.preHooks с crawlerDetectBlock.Пример пресета:
return [
'contact' => [
'preHooks' => 'crawlerDetectBlock',
'hooks' => 'email,FormItSaveForm',
'validate' => 'name:required,email:email:required',
'emailTo' => 'manager@site.ru',
'emailSubject' => 'Обратная связь',
// ...
],
];Если preHooks уже есть, перечислите через запятую: 'preHooks' => 'crawlerDetectBlock,другойХук'.
Сниппет isCrawler возвращает "1" (бот) или "0" (не бот). Вызывайте без кэша.
[[!isCrawler:eq=`0`:then=`[[$chatWidget]]`]]{if $modx->runSnippet('isCrawler', []) == '0'}
{$modx->getChunk('chatWidget')}
{/if}[[!isCrawler:eq=`0`:then=`[[$googleAnalytics]]`]]{if $modx->runSnippet('isCrawler', []) == '0'}
{$modx->getChunk('googleAnalytics')}
{/if}Добавьте crawlerDetectBlock в preHooks FormIt. См. Быстрый старт.
В каждом вызове FormIt добавьте crawlerDetectBlock в &preHooks.
Вызывайте сниппет счётчика, только если посетитель не бот:
[[!isCrawler:eq=`0`:then=`[[!yourVisitorCounterSnippet]]`]]{if $modx->runSnippet('isCrawler', []) == '0'}
{$modx->runSnippet('yourVisitorCounterSnippet', [])}
{/if}Те же шаги, что у AJAX-формы (FetchIt).
Не учитывать ботов в счётчике просмотров товара:
[[!isCrawler:eq=`0`:then=`[[!msProductViews? &id=`[[*id]]`]]`]]{if $modx->runSnippet('isCrawler', []) == '0'}
{$modx->runSnippet('msProductViews', ['id' => $productId])}
{/if}