Определите, не является ли посетитель ботом/сканером с помощью Smarty

Как мы можем определить, не является ли посетитель, обращающийся к нашему веб-сайту, ботом или поисковым роботом, использующим файловую систему шаблона Smarty v3 (.tpl)?

Например, в PHP простым решением будет:

if (!preg_match('/bot|proxy|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'])){

}

Есть ли простой способ сделать это прямо в файле шаблона smarty.net?


person Nikolas    schedule 12.03.2016    source источник
comment
Со 100% точностью это невозможно   -  person    schedule 12.03.2016
comment
попробуйте ввести капчу.   -  person bansi    schedule 12.03.2016


Ответы (1)


Smarty — это движок шаблонов, предназначенный для создания презентаций, однако он также может выполнять логику, что в таком случае не имеет смысла и делает ваш код более зависимым, а значит, его труднее изменить.

Что ты мог сделать?

Лучшее решение — присвоить шаблон с обработанной логикой переменной Smarty, например:

PHP:

$smarty->assign('is_bot', preg_match('/bot|proxy|crawl|slurp|spider|^$/i', $_SERVER['HTTP_USER_AGENT'])));

Шаблон:

{if !$is_bot}
    <!-- non bot stuff -->
{/if}

Помимо описанного выше, вы также можете создать Smarty Plugin. Это легко сделать. Пример:

Умный плагин:

<?php
function smarty_function_isBot(array $params, Smarty_Internal_Template $template)
{
    return preg_match('/bot|proxy|crawl|slurp|spider|^$/i', $_SERVER['HTTP_USER_AGENT']));
}
?>

Шаблон:

{isBot}

Использование условий

{if isBot}
    <!-- non bot stuff -->
{/if}
person Ilia    schedule 12.03.2016