第七章 内建函数

目录
{capture}
{config_load}
{foreach},{foreachelse}
{if},{elseif},{else}
{include}
{include_php}
{insert}
{ldelim},{rdelim}
{literal}
{php}
{section},{sectionelse}
{strip}

    Smarty带有内建函数。这些内建函数是Smarty模板引擎的有机部分。你不可以创建与之同名的定制函数,而且也没有必要修改内建函数。

    这些函数中的一部分有一个assign属性,可以将函数的结果收集到模板中的一个变量,而不是输出;很象{assign}函数。

{capture}

    {capture}用来收集标记间模板的输出到一个变量,而不是显示它。任何在{capture name='foo'}{/capture}之间的内容会被收集在name属性指定的变量中。

    收集的内容可以用在模板中,形式为$smarty.capture.foo,其中"foo"是name属性中传递的值。如果你不提供name属性,那么就使用"default"作为名字,即:$smarty.capture.default

    {capture}不可以被嵌套。

属性名 类型 必需? 缺省值 描述
namestring No default 捕获块的名称。
assignstringNon/a 将捕获内容赋值的变量名。

注意

    在捕获{insert}输出时要小心。如果你$caching是开着的,而且你要运行的{insert}命令在缓存内容中,那么不要捕获该内容。

例子7-1. {capture}使用name属性

{* 除非内容已经显示,我们不想打印div标记 *}
{capture name=banner}
  {include file='get_banner.tpl'}
{/capture}

{if $smarty.capture.banner ne ''}
<div id="banner">{$smarty.capture.banner}</div>
{/if}

例子7-2. {capture}到模板变量中

    该例子也演示了{popup}函数:

{capture name=some_content assign=popText}
The server is {$smarty.server.SERVER_NAME|upper} at {$smarty.server.SERVER_ADDR}<br>
Your ip is {$smarty.server.REMOTE_ADDR}.
{/capture}
<a href="#" {popup caption='Server Info' text=$popText}>help</a>

    参见$smarty.capture{eval}{fetch}fetch()以及{assign}