{capture}

{capture}可以捕获标记范围内的输出内容,存到变量中而不显示。 任何在{capture name='foo'}{/capture} 之间的内容都会被捕获到变量,变量名可以通过name属性来指定。

捕获的内容可以通过$smarty.capture.foo变量来使用,这里foo是设置的name属性。如果没有提供name属性,默认是“default”,也就是$smarty.capture.default.

{capture}可以被嵌套使用。

属性:

参数名称 类型 必选参数 默认值 说明
name string Yes n/a 捕获区域的名称
assign string No n/a 捕获内容后赋值的变量名
append string No n/a 将捕获的内容增加到数组中

可选标记:

名称 说明
nocache 关闭捕获区域的缓存

警告

当捕获{insert}输出的时候请小心。 如果开启了$caching并且 你希望通过{insert} 在缓存的页面上显示动态内容,那么你无法捕获这些内容。


Example 7.21. {capture}使用name属性

  1. {* we don't want to print a div tag unless content is displayed *}
  2. {capture name="banner"}
  3. {capture "banner"} {* short-hand *}
  4. {include file="get_banner.tpl"}
  5. {/capture}
  6.  
  7. {if $smarty.capture.banner ne ""}
  8. <div id="banner">{$smarty.capture.banner}</div>
  9. {/if}
  10.  


Example 7.22. {capture} 捕获内容到变量

下面是capture函数的演示

  1. {capture name=some_content assign=popText}
  2. {capture some_content assign=popText} {* short-hand *}
  3. The server is {$my_server_name|upper} at {$my_server_addr}<br>
  4. Your ip is {$my_ip}.
  5. {/capture}
  6. <a href="#">{$popText}</a>
  7.  


Example 7.23. {capture} 捕获内容到数组变量

下面例子演示了如何多次捕获内容,形成数组。

  1. {capture append="foo"}hello{/capture}I say just {capture append="foo"}world{/capture}
  2. {foreach $foo as $text}{$text} {/foreach}
  3.  

输出:

  1. I say just hello world
  2.  

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

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