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}