{include}

{include}用于载入其他模板到当前模板中。 在包含模板中可用的变量,载入后在当前模板仍然可用。

  • {include}必须设置file 属性,设置载入的文件资源路径。

  • 设置了可选的assign属性,将{include}模板的内容赋值到变量,而并非输出。 与 {assign}操作相似。

  • 包含模板时,可以像使用属性一样设置传递的变量。 这样传递的变量,作用范围仅限于包含的模板内。 属性传递的变量将覆盖原包含模板的同名变量。

  • 你可以在当前模板内使用包含模板的全部变量。 但是如果包含模板内有修改或者新建变量,那么这些变量只有包含模板的作用范围,而不可以是当前{include}模板中使用。 这种默认的设置,可以通过在包含模板时设置{include}的作用范围属性,或者 在修改或新增变量时通过{assign}的作用范围属性来设定。 后者在需要包含模板返回值时比较有用。

  • 当文件不在$template_dir目录中时, 使用资源的语法来{include}包含文件。

Attributes:

参数名称 类型 必选参数 默认值 说明
file string Yes n/a 包含载入的文件名
assign string No n/a 将包含的文件内容赋值给变量
cache_lifetime integer No n/a 单独开启被包含模板的缓存时间
compile_id string/integer No n/a 单独设置被包含模板的编译ID
cache_id string/integer No n/a 单独设置被包含模板的缓存ID
scope string No n/a 定义被包含模板的赋值变量作用范围: 'parent','root' 或 'global'
[var …] [var type] No n/a 传递到包含模板的变量

可选标记:

名称 说明
nocache 关闭包含模板的缓存
caching 打开包含模板的缓存
inline 设置成true时,在编译时把包含模板的内容也合并到当前模板的编译文件中。


Example 7.46. 简单 {include} 例子

  1. <html>
  2. <head>
  3. <title>{$title}</title>
  4. </head>
  5. <body>
  6. {include file='page_header.tpl'}
  7.  
  8. {* body of template goes here, the $tpl_name variable
  9. is replaced with a value eg 'contact.tpl'
  10. *}
  11. {include file="$tpl_name.tpl"}
  12.  
  13. {* using shortform file attribute *}
  14. {include 'page_footer.tpl'}
  15. </body>
  16. </html>
  17.  


Example 7.47. {include} 传递变量

  1. {include 'links.tpl' title='Newest links' links=$link_array}
  2. {* body of template goes here *}
  3. {include 'footer.tpl' foo='bar'}
  4.  

包含了下面的 links.tpl 模板

  1. <div id="box">
  2. <h3>{$title}{/h3>
  3. <ul>
  4. {foreach from=$links item=l}
  5. .. do stuff ...
  6. </foreach}
  7. </ul>
  8. </div>
  9.  


Example 7.48. {include} 作用范围示例

在包含的模板内赋值的变量,在包含模板内可见。

  1. {include 'sub_template.tpl' scope=parent}
  2. ...
  3. {* display variables assigned in sub_template *}
  4. {$foo}<br>
  5. {$bar}<br>
  6. ...
  7.  

包含了下面的 sub_template.tpl 模板

  1. ...
  2. {assign var=foo value='something'}
  3. {assign var=bar value='value'}
  4. ...
  5.  


Example 7.49. {include} 关闭缓存

包含模板将不被缓存

  1. {include 'sub_template.tpl' nocache}
  2. ...
  3.  


Example 7.50. {include} 单独的缓存时间

下面例子包含模板将单独设置缓存时间500秒。

  1. {include 'sub_template.tpl' cache_lifetime=500}
  2. ...
  3.  


Example 7.51. {include}开启缓存

下面的例子包含模板的缓存将独立于全局模板缓存设置之外。

  1. {include 'sub_template.tpl' caching}
  2. ...
  3.  


Example 7.52. {include} 和赋值变量

下面的例子将nav.tpl的内容赋值给了$navbar 变量, 该变量将页面的头部和底部显示。

  1. <body>
  2. {include 'nav.tpl' assign=navbar}
  3. {include 'header.tpl' title='Smarty is cool'}
  4. {$navbar}
  5. {* body of template goes here *}
  6. {$navbar}
  7. {include 'footer.tpl'}
  8. </body>
  9.  


Example 7.53. {include} 相对路径

下面的例子包含的模板文件都是相对当前模板的目录。

  1. {include 'template-in-a-template_dir-directory.tpl'}
  2. {include './template-in-same-directory.tpl'}
  3. {include '../template-in-parent-directory.tpl'}
  4.  


Example 7.54. 各种 {include} 资源例子

  1. {* absolute filepath *}
  2. {include file='/usr/local/include/templates/header.tpl'}
  3.  
  4. {* absolute filepath (same thing) *}
  5. {include file='file:/usr/local/include/templates/header.tpl'}
  6.  
  7. {* windows absolute filepath (MUST use "file:" prefix) *}
  8. {include file='file:C:/www/pub/templates/header.tpl'}
  9.  
  10. {* include from template resource named "db" *}
  11. {include file='db:header.tpl'}
  12.  
  13. {* include a $variable template - eg $module = 'contacts' *}
  14. {include file="$module.tpl"}
  15.  
  16. {* wont work as its single quotes ie no variable substitution *}
  17. {include file='$module.tpl'}
  18.  
  19. {* include a multi $variable template - eg amber/links.view.tpl *}
  20. {include file="$style_dir/$module.$view.tpl"}
  21.  

参见 {include_php}, {insert}, {php}, 模板资源模板组件化.

原文: https://www.smarty.net/docs/zh_CN/language.function.include.tpl