Skip to content

{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}