Skip to content

{eval}

{eval} 用于将变量作为模板进行评估。这可以用于将模板标签/变量嵌入到变量或配置文件变量中。

属性

属性名 必需 描述
var 要评估的变量(或字符串)
assign 将输出分配给模板变量的名称

如果提供了 assign 属性,{eval} 函数的输出将分配给该模板变量,而不是输出到模板中。

注意

  • 评估的变量与模板一样处理。它们遵循相同的转义和安全功能,就像它们是模板一样。

  • 每次调用时,评估的变量都会被编译,编译版本不会被保存!但是,如果启用了缓存,输出将与模板的其余部分一起进行缓存。

  • 如果要评估的内容不经常更改或重复使用,请考虑使用 {include file="string:{$template_code}"}。这样可以缓存编译状态,因此不必在每次调用时运行(相对较慢的)编译器。

示例

配置文件 setup.conf 的内容:

emphstart = <strong>
emphend = </strong>
title = Welcome to {$company}'s home page!
ErrorCity = You must supply a {#emphstart#}city{#emphend#}.
ErrorState = You must supply a {#emphstart#}state{#emphend#}.

模板如下:

{config_load file='setup.conf'}

{eval var=$foo}
{eval var=#title#}
{eval var=#ErrorCity#}
{eval var=#ErrorState# assign='state_error'}
{$state_error}

以上模板将输出:

This is the contents of foo. Welcome to Foobar Pub & Grill's home page! You must
supply a <strong>city</strong>. You must supply a <strong>state</strong>.

这将输出服务器名称(大写)和 IP。分配的变量 $str 可能来自数据库查询。

<?php
    $str = 'The server name is {$smarty.server.SERVER_NAME|upper} '
           .'at {$smarty.server.SERVER_ADDR}';
    $smarty->assign('foo',$str);

模板如下:

{eval var=$foo}