Smarty 是什么?
为什么要使用它?
用例和工作流程
语法比较
模板继承
最佳实践
速成课程
{include}
标记用于将其他模板包含到当前模板中。当前模板中可用的任何变量在包含的模板中也可用。
{include}
标记必须具有包含模板资源路径的file
属性。
设置可选的assign
属性可以指定将{include}
输出分配到的模板变量,而不是显示该输出。类似于 {assign}
。
变量可以作为属性传给包含的模板。显式传给包含的模板的任何变量只在包含的文件的范围内可用。当变量重名时,属性变量将覆盖当前模板变量。
您可以在包含的模板内使用包含模板中的所有变量。但在包含的模板内对变量进行的更改或新创建的变量都是局部范围内的,在{include}
语句之后的包含模板内不可见。对于在包含的模板中分配的所有变量,可以使用{include}
语句上的 scope 属性或对各个变量使用{assign}
语句上的 scope 属性来更改这种默认行为。后者可用于将值从包含的模板返回到包含模板。
使用模板资源的语法以{include}
$template_dir
目录之外的文件。
属性
属性名称 | 类型 | 是否为必需 | 默认值 | 说明 |
---|---|---|---|---|
文件 | 字符串 | 是 | 无 | 要包含的模板文件的名称 |
分配 | 字符串 | 否 | 无 | 将 include 的输出分配到的变量名称 |
缓存生命周期 | 整数 | 否 | 无 | 启用此子模板的缓存,并设置一个单独的缓存生存周期 |
compile_id | 字符串/整数 | 否 | 无 | 使用单独的 compile_id 编译此子模板 |
cache_id | 字符串/整数 | 否 | 无 | 以单独的 cache_id 启用此子模板的缓存 |
scope | 字符串 | 否 | 无 | 定义子模板中分配变量的范围:'parent','root' 或 'global' |
[var ...] | [var 类型] | 否 | 无 | 要传递到本地模板中的变量 |
选项标志
名称 | 说明 |
---|---|
nocache | 禁用此子模板的缓存 |
caching | 启用此子模板的缓存 |
inline | 如果设置,将子模板的编译代码合并到已编译的调用模板中 |
示例 7.46.简单的 {include} 示例
<html> <head> <title>{$title}</title> </head> <body> {include file='page_header.tpl'} {* body of template goes here, the $tpl_name variable is replaced with a value eg 'contact.tpl' *} {include file="$tpl_name.tpl"} {* using shortform file attribute *} {include 'page_footer.tpl'} </body> </html>
示例 7.47.传递变量的 {include}
{include 'links.tpl' title='Newest links' links=$link_array} {* body of template goes here *} {include 'footer.tpl' foo='bar'}
上文模板中包含下文示例 links.tpl
<div id="box"> <h3>{$title}{/h3> <ul> {foreach from=$links item=l} .. do stuff ... </foreach} </ul> </div>
示例 7.48.使用父作用域的 {include}
在已包含模板中分配的变量将在包含模板中显示。
{include 'sub_template.tpl' scope=parent} ... {* display variables assigned in sub_template *} {$foo}<br> {$bar}<br> ...
上文模板中包含下文示例 sub_template.tpl
... {assign var=foo value='something'} {assign var=bar value='value'} ...
示例 7.50.具有单独缓存生存周期的 {include}
在此示例中,已包含模板将被缓存,其单独的缓存生存周期为 500 秒。
{include 'sub_template.tpl' cache_lifetime=500} ...
示例 7.52.拥有 {include} 并分配给变量
此示例将 nav.tpl
的内容分配给 $navbar
变量,然后在页面的顶部和底部输出该变量。
<body> {include 'nav.tpl' assign=navbar} {include 'header.tpl' title='Smarty is cool'} {$navbar} {* body of template goes here *} {$navbar} {include 'footer.tpl'} </body>
示例 7.53.具有相对路径的 {include}
此示例中包含另一个模板,该模板相对于当前模板的目录。
{include 'template-in-a-template_dir-directory.tpl'} {include './template-in-same-directory.tpl'} {include '../template-in-parent-directory.tpl'}
示例 7.54.各种 {include} 资源示例
{* absolute filepath *} {include file='/usr/local/include/templates/header.tpl'} {* absolute filepath (same thing) *} {include file='file:/usr/local/include/templates/header.tpl'} {* windows absolute filepath (MUST use "file:" prefix) *} {include file='file:C:/www/pub/templates/header.tpl'} {* include from template resource named "db" *} {include file='db:header.tpl'} {* include a $variable template - eg $module = 'contacts' *} {include file="$module.tpl"} {* wont work as its single quotes ie no variable substitution *} {include file='$module.tpl'} {* include a multi $variable template - eg amber/links.view.tpl *} {include file="$style_dir/$module.$view.tpl"}
另请参见 {include_php}
、{insert}
、{php}
、模板资源 和 组建模板。