{eval}

    {eval}用来将一个变量理解为一个模板。例如,可以在变量中嵌入模板标记/变量,或者在配置文件变量中嵌入模板标记/变量。

    如果你指定assign属性,那么{eval} 函数的输出将赋予该模板变量而不是输出到模板中。

属性名 类型 必需 缺省 描述
varmixedYesn/a 要进行求值的变量(或字符串)
assignstringNon/a 输出将赋予的模板变量

技术注解:

  • 被求值的变量等同于模板进行处理。它们遵循相同的转义和安全亚求,就象它们是模板一样。

  • 被求值的变量每次调用时都会被编译,编译的版本不会被保存!不过,如果你打开缓存,那么输出将和模板的其它部分一同被缓存。

例子8-6. {eval}

    配置文件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>.

例子8-7. 另一个{eval}例子

    本例将输出服务器名(大写)和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}