字符串模板资源 {/programmers/resources/resources-string/}
Smarty 可以通过使用 string: 或 eval: 资源从字符串中渲染模板。
-
string:资源的行为与模板文件大致相同。模板源是从字符串编译的,并存储编译后的模板代码以供以后重用。每个唯一的模板字符串都会创建一个新的编译模板文件。如果您的模板字符串被频繁访问,这是一个好的选择。如果您有频繁更改的模板字符串(或具有低重用价值的字符串),eval:资源可能是一个更好的选择,因为它不会将编译的模板保存到磁盘。 -
eval:资源会在每次渲染页面时评估模板源。这是一个对于具有低重用价值的字符串的好选择。如果同一字符串被频繁访问,string:资源可能是一个更好的选择。
注意
对于
string:资源类型,每个唯一的字符串都会生成一个编译文件。Smarty 无法检测到已经改变的字符串,因此将为每个唯一的字符串生成一个新的编译文件。选择正确的资源非常重要,以免您的磁盘空间被浪费的编译字符串填满。
<?php
$smarty->assign('foo','value');
$template_string = 'display {$foo} here';
$smarty->display('string:'.$template_string); // 编译以供以后重用
$smarty->display('eval:'.$template_string); // 每次都编译
?>
在 Smarty 模板内部
{include file="string:$template_string"} {* 编译以供以后重用 *}
{include file="eval:$template_string"} {* 每次都编译 *}
string: 和 eval: 资源都可以通过 urlencode() 或 base64_encode() 进行编码。在通常使用 string: 和 eval: 的情况下,这并不是必需的,但在与 Extends Template Resource 一起使用时,则需要这样做。
<?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); // 将使用 urldecode() 解码字符串
$smarty->display('eval:base64:'.$template_string_base64); // 将使用 base64_decode() 解码字符串
?>
在 Smarty 模板内部
{include file="string:urlencode:$template_string_urlencode"} {* 将使用 urldecode() 解码字符串 *}
{include file="eval:base64:$template_string_base64"} {* 将使用 base64_decode() 解码字符串 *}