Защита от спама ModxEvo и сниппет eform
В данной статье рассмотрим вариант защиты от спама для сайта созданного на modxEvo и использующего сниппет eform для отправки форм.
Метод заключается в проверке имени пользователя, или любого другого поля на наличие английских букв.
Для нужно создать сниппет, назовем его например checkBot и вызвать в нем такую функцию:
<?php
function checkBot ($fields) {
$bot = false;
if (strlen($fields["name"])!=strlen(preg_replace("/[a-zA-Z]/i", "", $fields["name"])))
{$bot=true;}
if ($bot==true){
return false;
} else {
return true;
}
}
В данном случае в массиве $fields содержатся все поля отправленной формы.
Ключи в данном массиве - являются именами полей т.е. в шаблоне формы имеем такой код:
<input type="text" placeholder="Введите ваше имя" autofocus="" required="" name="name" eform="Имя::1">
Соответсвенно в массиве $fields будет значение поля name, мы его проверяем на наличие английских букв.
Теперь перед первым вызовом eform на странице необходимо вызвать наш сниппет, а в вызов eform дописать функцию для обработки события отправки письма
[/!checkBot]][/!eForm? &formid=`contact-form` &tpl=`form-tpl` &to=`` &report=`report-tpl` &thankyou=`thank-tpl` &subject=`Сообщение с сайта` &eFormOnBeforeMailSent=`checkBot`]]
Минус данного метода в том, что он не выводит сообщение об ошибке, а просто не отправляет сообщение и не показывает формы.
Данный метод подходит для грубой защиты посадочных страниц, landing page и прочих "не промышленных сайтов"