Language function include
{include}标签用于在当前模板中包含其他模板。当前模板中可用的任何变量也可以在包含的模板中使用。
以下是关于{include}标签的一些要点:
{include}标签必须具有file属性,该属性包含模板资源路径。- 设置可选的
assign属性可以指定将{include}的输出分配给的模板变量,而不是显示在页面上。类似于{assign}标签的功能。 - 可以将变量作为属性传递给包含的模板。显式传递给包含模板的变量仅在包含文件的范围内可用。属性变量会覆盖当前模板中的同名变量。
- 在包含的模板中可以使用包含模板的所有变量。但是,在包含模板内部更改变量或创建新变量的作用域仅限于包含模板内部,在
{include}语句之后的包含模板内部是不可见的。可以通过在{include}语句中使用scope属性或在{assign}语句中使用scope属性来更改分配给包含模板的所有变量的默认行为。后者可用于将包含模板中的值返回给包含模板。
{include}标签具有以下属性:
file(必需):要包含的模板文件的名称。assign(可选):将{include}的输出分配给的模板变量的名称。cache_lifetime(可选):启用具有单独缓存生存时间的子模板缓存。compile_id(可选):使用单独的compile_id编译此子模板。cache_id(可选):启用具有单独缓存 ID 的子模板缓存。scope(可选):定义分配给子模板的所有变量的作用域:'parent'、'root'或'global'。[var ...](可选):传递给模板的局部变量。
此外,{include}标签还支持以下选项标志:
nocache:禁用此子模板的缓存。caching:启用此子模板的缓存。inline:如果设置,将子模板的编译代码合并到编译后的调用模板中。
以下是一些示例:
<html>
<head>
<title>{$title}</title>
</head>
<body>
{include file='page_header.tpl'}
{* 模板的主体内容放在这里,$tpl_name变量将被替换为实际值,例如'contact.tpl' *}
{include file="$tpl_name.tpl"}
{* 使用简写形式的file属性 *}
{include 'page_footer.tpl'}
</body>
</html>
{include 'links.tpl' title='Newest links' links=$link_array}
{* 模板的主体内容放在这里 *}
{include 'footer.tpl' foo='bar'}
上面的模板包含了下面的示例links.tpl:
<div id="box">
<h3>{$title}{/h3>
<ul>
{foreach from=$links item=l}
.. 做一些操作 ...
</foreach}
</ul>
</div>
在包含的模板中分配的变量将在包含模板中可见。
{include 'sub_template.tpl' scope=parent}
...
{* 在子模板中显示分配的变量 *}
{$foo}<br>
{$bar}<br>
...
上面的模板包含了下面的示例sub_template.tpl:
...
{assign var=foo value='something'}
{assign var=bar value='value'}
...
包含的模板将不被缓存。
{include 'sub_template.tpl' nocache}
...
在此示例中,包含的模板将被缓存,并具有 500 秒的单独缓存生存时间。
{include 'sub_template.tpl' cache_lifetime=500}
...
在此示例中,包含的模板将独立于全局缓存设置进行缓存。
{include 'sub_template.tpl' caching}
...
此示例将nav.tpl的内容分配给$navbar变量,并在页面的顶部和底部输出。
<body>
{include 'nav.tpl' assign=navbar}
{include 'header.tpl' title='Smarty is cool'}
{$navbar}
{* 模板的主体内容放在这里 *}
{$navbar}
{include 'footer.tpl'}
</body>
此示例相对于当前模板的目录包含了另一个模板。
{include 'template-in-a-template_dir-directory.tpl'}
{include './template-in-same-directory.tpl'}
{include '../template-in-parent-directory.tpl'}
此外,{include}标签还支持一些高级用法,例如绝对文件路径、模板资源名称和动态变量名。请参阅上述代码块中的示例以获取更多详细信息。
请参阅以下链接获取有关{insert}标签、模板资源和组件化模板的更多信息: