{eval}

{eval}可以执行变量显示。它可用于执行模板变量中的标签/变量, 或者来自于配置文件的标签/变量。

如果你提供了assign 属性, {eval}函数的输出将不会显示,而是赋值给模板变量。

参数名称 类型 必选参数 默认值 说明
var mixed Yes n/a 需要执行的变量或字符串
assign string No n/a 用于赋值的变量名

技术说明

  • 执行变量的方式和执行模板一样,使用与模板相同的解析方式和安全机制。

  • 执行变量的操作将在每次编译的时候都会启动,编译版本的程序不会被保存! 然而如果你开启了缓存设置,那么 模板的其余部分会被缓存。

  • 如果执行的内容不会经常变化,或者被多次使用,可以考虑使用 {include file="string:{$template_code}"}来代替。 这可以在编译后被缓存(速度更快),而且也不会每次编译都执行。


Example 8.3. {eval}

这里有个配置文件,setup.conf.

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

模板:

  1. {config_load file='setup.conf'}
  2.  
  3. {eval var=$foo}
  4. {eval var=#title#}
  5. {eval var=#ErrorCity#}
  6. {eval var=#ErrorState# assign='state_error'}
  7. {$state_error}
  8.  

将输出:

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


Example 8.4. 另一个{eval}例子

例子将显示服务器名称(大写字母)和IP。 赋值的$str可以是来自于数据库的查询。

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

模板是:

  1. {eval var=$foo}
  2.  

原文: https://www.smarty.net/docs/zh_CN/language.function.eval.tpl