Меня лично дико раздражает каптча, в особенности, когда великая и могучая гугля шесть раз подряд пытается у меня узнать как выглядят витрины и дороги, а если нужно вводить циферки написанные на тарабарском то вообще труба. Это меня как пользователя она раздражает. А как программиста — ее не всегда корректно впишешь в дизайн. Поэтому я искал решения, которые бы отсеивали спам, но при этом не использовали каптчу.
По сути было найдено два решения:
1) Скрытое поле и проверка на пустоту, но, к сожалению, роботы научились распознавать такие поля. 2) использовать сервис Akmist, который проверяет содержимое, но почему-то он отвалился и я так не сумел найти к нему подход.
В итоге — написал простое, но тие не менее эффективное решение, основанное на проверке проведенного времени на странице. Роботы они ведь что делают? Загружают страницу, парсят, находят форму, заполняют — отправляют. На все про все по моей личной статистике уходит не больше секунды, в то время как обычный пользователь для заполнения формы тратит как минимум секунд 30.
Итак, от слов к делу.
Для eForm (evolutionCMS).
Создаем сниппет checkSpamTime, вставляем в него код:
Далее делаем вызов сниппета над вызовом eForm (если используется несколько форм, необходимо поставить ОДИН раз над самой верхней), и в самом сниппете пишем &eFormOnBeforeMailSent=`checkSpamTime`
В итоге у нас получается что-то вроде такого:
Ресурс или чанк не найдены для шаблона с id= ''
Для formLister (evolutionCMS)
Создаем сниппет checkSpamTimeFL, вставляем в него код и вызываем его в prepare. В итоге у нас получается что-то вроде такого:
Замечание. Я с Ревой знаком поверхностно, поэтому может кто подскажет: на что заменить проверку count($_POST)? Я че-та не нашел ничего более изящного((