什么是 Smarty?
为什么使用它?
用例和工作流程
语法比较
模板继承
最佳实践
快速入门
Smarty 可以使用 string:
或 eval:
资源从字符串呈现模板。
string:
资源的行为与模板文件很相似。从字符串编译模板源,并存储编译后的模板代码以便以后重复使用。每个唯一的模板字符串都将创建一个新的编译后模板文件。如果频繁访问模板字符串,那么这是一个不错的选择。如果模板字符串经常发生变化(或重复使用价值很低),那么 eval:
资源可能是一个更好的选择,因为它不会将编译后的模板存储到磁盘中。
eval:
资源在每次呈现页面时都会评估模板源。对于重复使用价值很低的字符串,这是一个不错的选择。如果频繁访问同一个字符串,那么 string:
资源可能是一个更好的选择。
对于 string:
资源类型,每个独特的字符串都会生成一个已编译文件。Smarty 无法检测到已更改的字符串,因此将为每个独特的字符串生成一个新的已编译文件。选择正确的资源非常重要,这样才不会用无用的已编译字符串填充磁盘空间。
示例 16.5。使用字符串中的模板
<?php $smarty->assign('foo','value'); $template_string = 'display {$foo} here'; $smarty->display('string:'.$template_string); // compiles for later reuse $smarty->display('eval:'.$template_string); // compiles every time ?>
来自 Smarty 模板
{include file="string:$template_string"} {* compiles for later reuse *} {include file="eval:$template_string"} {* compiles every time *}
string:
和 eval:
资源都可以使用 urlencode()
或 base64_encode()
进行编码。通常使用 string:
和 eval:
时不需要这样做,但在将其与 扩展模板资源
结合使用时就需要。
示例 16.6。使用已编码字符串中的模板
<?php $smarty->assign('foo','value'); $template_string_urlencode = urlencode('display {$foo} here'); $template_string_base64 = base64_encode('display {$foo} here'); $smarty->display('eval:urlencode:'.$template_string_urlencode); // will decode string using urldecode() $smarty->display('eval:base64:'.$template_string_base64); // will decode string using base64_decode() ?>
来自 Smarty 模板
{include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *} {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *}