Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
modx анти-спам проверка
Для eForm (evolutionCMS).
Создаем сниппет checkSpamTime, вставляем в него код:
<?php
if ($_SESSION['now'])
{
$_SESSION['lt'] = $_SESSION['now'];
}
$_SESSION['now'] = microtime(true);
if (!function_exists('checkSpamTime'))
{
function checkSpamTime(&$fields)
{
$time = $_SESSION['now'] - $_SESSION['lt'];
if ($time<2) exit(); //Здесь проверяем сколько секунд прошло с момента точки входа. 5 - с запасом, можно ставить и единицу
}
}
Далее делаем вызов сниппета над вызовом eForm (если используется несколько форм, необходимо поставить ОДИН раз над самой верхней), и в самом сниппете пишем &eFormOnBeforeMailSent=`checkSpamTime`
В итоге у нас получается что-то вроде такого:
[!checkSpamTime!]
[!eForm?
/*...*/
&eFormOnBeforeMailSent=`checkSpamTime`
/*...*/
!]
Для formLister (evolutionCMS)
Создаем сниппет checkSpamTimeFL, вставляем в него код
<?php
if ($FormLister->isSubmitted())
{
$flag = false;
$now = microtime(true);
if ((isset($_SESSION['now'])) && (($now - $_SESSION['now']) > 2))
{
$flag = true;
}
$FormLister->setValid($flag);
}
else
{
$_SESSION['now'] = microtime(true);
}
и вызываем его в prepare.
В итоге у нас получается что-то вроде такого:
[!FormLister?
/*...*/
&prepare=`checkSpamTimeFL`
/*...*/
!]
Для FormIt (Modx Revolution)
Создаем сниппет checkSpamTime, вставляем код:
<?php
if (count($_POST))
{
$flag = false;
$now = microtime(true);
if ((isset($_SESSION['now'])) && (($now - $_SESSION['now']) > 2))
{
$flag = true;
}
return $flag;
}
else
{
$_SESSION['now'] = microtime(true);
}
И вписываем его первым в хук и пре хук, т.е.
[[!FormIt?
/*...*/
&preHooks=`checkSpamTime`
&hooks=`checkSpamTime,email`
/*...*/
!]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment