0. Такс такс… Спам на сайте? давайте-ка его убирать.

Данный метод прокатит практически в любом случае, логика проста, спам-боты заполняют все поля форм, и за частую отключат js, по этому добавляем с помощью js в форму поле, если это поле будет отсутствовать или будет заполнено, форма не отправиться


1. Добавляем JavaScript (с jQuery)

$(function(){
    // Антиспам
    $('.ajax_form').append('<input type="text" name="org" value="" class="_org" style="visability:hidden; height: 0; width: 0; padding: 0; border:none;"/>')
    // Антиспам х  
})  

* где '.ajax_form' класс формы



Для версии Revo с приложениями FromIt и AjaxForm

2. Добавляем снипет, именуем например validate

<?php
function text_error(){
    return false;
    die();
}
if(isset($_POST['org'])){
    if($hook->getValue('org')!=''){
            $modx->log(xPDO::LOG_LEVEL_ERROR, 'Ошибка заполнения формы: не пустое поле антиспама');
            $modx->log(xPDO::LOG_LEVEL_ERROR, print_r($_POST, 1));
            text_error();
    }else{
        return true;
    }
}else{
    $modx->log(xPDO::LOG_LEVEL_ERROR, 'Ошибка заполнения формы: нет поля антиспама');
    $modx->log(xPDO::LOG_LEVEL_ERROR, print_r($_POST, 1));
    text_error();
}

3. При вызове формы в чанке добавляем хук с названием этого снипета (validate)

&hooks=`validate, email, FormItSaveForm`



Для версии EVO с приложениями eForm и FormLister

2. Добавляем снипет «validate»

<?php
function validate(){
	
	if(isset($_POST['org'])){
		if($_POST['org']!=''){
			die();
		}else{
			
		}
	}else{
		die();
	}
	
}

Перед выводом формы выводим снипет
[!validate!]


Если используете FormLister

В выводе FormLister добавляем

[!FormLister?
	&prepareProcess=`validate`

Для чистого eForm
[!eForm?
	&eFormOnValidate=`validate`




Готово, Всем спасибо, расходимся...

PS: Помог? Ставь лайк! Подписка не нужна (: