Skip to content

字符串模板资源 {/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() 解码字符串 *}