使用 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}
我们如何确定访问我们网站的访问者是否不是使用 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}