What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
{insert}
是废弃的函数,不应该再使用。将你的PHP逻辑放到PHP脚本中或者通过插件来代替。
在Smarty 3.1,{insert}
仅在SmartyBC中可用.
{insert}
的工作方式和{include}
函数很像,
除了当模板开启了caching时,{insert}
函数是不会被缓存,
它会在每次模板调用的时候都执行。
参数名称 | 类型 | 必选参数 | 默认值 | 说明 |
---|---|---|---|---|
name | string | Yes | n/a | insert函数的名称(insert_name ) 或 insert 插件 |
assign | string | No | n/a | 将输出的内容赋值给变量 |
script | string | No | n/a | 在insert函数调用前,载入的PHP文件名。 |
[var ...] | [var type] | No | n/a | 传递到insert函数的变量 |
我们假设你有一个包含了横幅广告的模板,广告将显示在页面的顶部。 横幅广告将包括HTML、图片、FLASH等。 所以我们不能在横幅内使用静态链接,也不能对其进行缓存。 我们用{insert}:模板可以从配置文件中获取到 #banner_location_id# 和 #site_id# 值, 并且调用一个函数来显示横幅广告的内容。
Example 7.56. {insert} 函数
{* 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”的insert函数,并且传递了 #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文件将被载入(仅一次)。
当该insert函数并不存在是,使用这个方法可以在该PHP文件中载入此函数。
载入的PHP文件路径可以是绝对路径,或是相对于
$trusted_dir
的路径。
如果安全机制开启,那么只有在$trusted_dir
目录中的文件才可以被载入。
参见安全机制。
传递的第二个参数是Smarty对象。
这样你可以在 {insert}
函数内引用和修改Smarty对象的信息。
如果该PHP文件无法找到,Smarty将寻找是否有相应名称的insert插件。
这是一个使页面部分区域不进行缓存的方法。
即使你开启了缓存,{insert}
函数也不会别缓存。
它会在每次页面创建时都动态执行,即使是缓存页面。
在这一些场合,如横幅广告、投票调查、即时天气,搜索结果、用户反馈区域等比较有用。
参见
{include}