{insert}
注意
Smarty 已经弃用了
{insert}标签,不应再使用。你应将 PHP 逻辑放在 PHP 脚本或插件函数中。从 Smarty 3.1 开始,{insert}标签只在SmartyBC中可用。
{insert}标签的工作方式与{include}标签非常相似,只是当模板caching启用时,{insert}标签不会被缓存。它们将在模板每次调用时执行。
| 属性名称 | 是否必需 | 描述 |
|---|---|---|
| name | 是 | 插入函数的名称(insert_name)或插入插件 |
| assign | 否 | 输出将被分配给的模板变量的名称 |
| script | 否 | 在调用插入函数之前包含的 PHP 脚本的名称 |
| [var ...] | 否 | 传递给插入函数的变量 |
示例
假设你有一个模板,在页面顶部有一个横幅插槽。横幅可以包含任何混合的 HTML、图片、Flash 等,所以我们不能在这里使用静态链接,我们也不希望这个内容与页面一起被缓存。在这种情况下,可以使用{insert}标签:模板知道#banner_location_id#和#site_id#的值(从配置文件中获取),并需要调用一个函数来获取横幅内容。
{* 获取横幅的示例 *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
{insert "getBanner" lid=#banner_location_id# sid=#site_id#} {* 简写 *}
在这个示例中,我们使用名为"getBanner"的名称,并传递参数#banner_location_id#和#site_id#。Smarty 将在你的 PHP 应用中寻找一个名为 insert_getBanner()的函数,并将#banner_location_id#和#site_id#的值作为关联数组的第一个参数传递。你的应用中所有的{insert}函数名称必须以"insert_"为前缀,以避免可能的函数名称空间冲突。你的 insert_getBanner()函数应该对传递的值进行处理,并返回结果。这些结果然后在模板中替换{insert}标签并显示。在这个例子中,Smarty 将调用这个函数:insert_getBanner(array("lid" => "12345","sid" => "67890"));并将返回的结果替换{insert}标签并显示。
- 如果你提供了
assign属性,那么{insert}标签的输出将被分配给这个模板变量,而不是输出到模板。
注意
当caching启用时,将输出分配给模板变量并不是很有用。
- 如果你提供了
script属性,那么在{insert}函数执行之前,这个 PHP 脚本将被包含(只包含一次)。这是插入函数可能还不存在,必须首先包含一个 PHP 脚本才能使其工作的情况。
路径可以是绝对的,也可以是相对于$trusted_dir的。如果启用了安全性,则脚本必须位于安全策略的$trusted_dir路径中。详见Security章节。
Smarty 对象作为第二个参数传递。这样,你可以在{insert}函数中引用和修改 Smarty 对象中的信息。
如果找不到 PHP 脚本,Smarty 将寻找对应的插入插件。
注意
可以使模板的部分内容不被缓存。如果你打开了caching,
{insert}标签将不会被缓存。即使在缓存的页面中,它们也会在每次创建页面时动态运行。这对于横幅、投票、实时天气、搜索结果、用户反馈区域等都很有用。
参见 {include}