Smarty 图标

您可以依照商标声明使用 Smarty 徽标。

Smarty Template Engine Smarty Template Engine

有关赞助、广告、新闻或其他查询,请通过以下方式联系我们

使用 Smarty 的网站

广告

{插入}

重要提示

{插入} 标签已从 Smarty 中弃用,不应使用。请改为将您的 PHP 逻辑放入 PHP 脚本或插件函数中。

注意

从 Smarty 3.1 开始,{插入} 标签只能通过SmartyBC获取。

{插入} 标签的工作方式与{include}标签非常相似,但不同之处在于,当模板缓存功能启用时,{插入} 标签不会被缓存。它们会在每次调用模板时执行。

属性名称 类型 是否必须 默认值 说明
名称 字符串 不适用 插入函数(insert_name)或插入插件的名称
分配 字符串 不适用 将输出分配到的模板变量的名称
脚本 字符串 不适用 在调用插入函数之前包含的 php 脚本的名称
[var ...] [var 类型] 不适用 传递给插入函数的变量

假设您有一个模板,在页面顶部有一个横幅插槽。横幅可以包含 HTML、图片、flash 等任意混合物,因此我们不能在这里只使用一个静态链接,而且我们不希望此内容与页面一起缓存。此时就用到了 {插入} 标签:模板知道 #banner_location_id# 和 #site_id# 值(从配置文件收集),并且需要调用一个函数以获取横幅内容。

示例 7.56 函数 {插入}

{* example of fetching a banner *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
{insert "getBanner" lid=#banner_location_id# sid=#site_id#} {* short-hand *}

在此示例中,我们使用名称 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} 标记的输出将分配给此模板变量,而不是将其输出到模板。

    注意

    启用 缓存 时,将输出分配给模板变量并不是非常有用。

  • 如果你提供 script 属性,此 php 脚本将在 {insert} 函数执行之前(仅一次)包含在内。这是插入函数可能尚未存在的情况,必须首先包含 php 脚本才能使其工作。

    该路径可以是绝对路径,也可以相对于 $trusted_dir 的相对路径。如果启用了安全性,则必须将该脚本放置在安全策略的 $trusted_dir 路径中。有关详细信息,请参阅 安全性 部分。

Smarty 对象作为第二个参数传递。通过此方法,你可以从 {insert} 函数引用和修改 Smarty 对象中的信息。

如果找不到 PHP 脚本,Smarty 会查找相应的插入插件。

技术说明

模板中的某些部分可能未缓存。如果你启用了 缓存,则 {insert} 标记不会被缓存。它们将在每次创建页面时动态运行,即使是在缓存页面中也是如此。这适用于诸如横幅、投票、实时天气、搜索结果、用户反馈区域等内容。

另请参阅 {include}