使用 Smarty 确定访问者是否为 bot/crawler

Determine if a visitor is not a bot/crawler with Smarty

我们如何确定访问我们网站的访问者是否不是使用 Smarty 的 v3 模板 (.tpl) 文件系统的机器人或爬虫?

例如,在 PHP 中,一个简单的解决方案是:

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

}

是否有任何简单的方法可以直接在 smarty.net 的模板文件中执行此操作?

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。这很容易做到。示例:

Smarty 插件:

<?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}