确定访问者是否不是使用 Smarty 的机器人/爬虫


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}

除此之外,您还可以创建智能插件。这很容易做到。例:

聪明的插件:

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