ThinkTemplate 模板引擎完全指南
ThinkTemplate 模板引擎完全指南
ThinkTemplate 是 ThinkPHP 的内置模板引擎,现已支持独立使用。本文详细介绍其核心特性和使用方法。
环境要求
ThinkTemplate 3.0:PHP 8.0+
ThinkTemplate 2.0:PHP 7.1+
核心特性
ThinkTemplate 是一个基于 XML 的编译型模板引擎,具有以下特性:
支持模板标签定界符定义
支持直接使用 PHP 代码书写
支持文件包含
支持多级标签嵌套
支持布局模板功能
一次编译多次运行,编译和运行效率非常高
模板文件和布局模板更新,自动更新模板缓存
系统变量无需赋值直接输出
支持多维数组的快速输出
支持模板变量的默认值
支持页面代码去除 HTML 空白
支持变量组合调节器和格式化功能
允许定义模板禁用函数和禁用 PHP 语法
通过标签库方式扩展
模板标签详解
普通标签
普通标签用于变量输出和模板注释,默认以 { 和 } 作为开始和结束标识。
变量输出
{$name} // 输出简单变量
{$vo.name} // 输出对象属性
{$vo['name']} // 输出数组元素
{$vo.name|strtoupper} // 使用过滤器
{$defaultValue|default='默认值'} // 默认值系统变量
{$Think.version} // ThinkPHP 版本
{$Think.now} // 当前时间
{$Think.const.APP_STATUS} // 常量
{$Think.session.user_id} // Session 变量
{$Think.get.id} // GET 参数调节器(过滤器)
{$name|strtoupper} // 字符串转大写
{$name|md5} // MD5 加密
{$name|substr=0,10} // 字符串截取
{$time|date='Y-m-d',###} // 日期格式化标签库标签
标签库标签用于条件控制、循环输出等逻辑操作。
条件判断
{eq name="name" value="value"}
相等时输出
{else/}
不相等时输出
{/eq}
{neq name="name" value="value"}
不相等时输出
{/neq}
{gt name="num" value="10"}
大于时输出
{/gt}
{elt name="num" value="10"}
小于等于时输出
{/elt}
{switch name="status"}
{case value="1"}待审核{/case}
{case value="2"}已通过{/case}
{default/}未知状态
{/switch}循环输出
{volist name="list" id="vo" offset="0" length="10"}
{$vo.name}
{$vo.id}
{/volist}
{foreach $list as $vo}
{$vo}
{/foreach}
{for start="1" end="10"}
{$i}
{/for}比较标签
{eq name="vo.status" value="1"}
正常
{/eq}
{like name="vo.email" value="%@qq.com"}
QQ邮箱
{/like}
{between name="vo.age" value="1,100"}
1-100之间
{/between}文件包含
{include file="header" /}
{include file="footer.html" /}
{include file="$template" /} // 动态模板标签嵌套
支持多级标签嵌套,满足复杂业务需求:
{volist name="list" id="vo"}
{eq name="vo.type" value="1"}
<span>类型1:{$vo.name}</span>
{elseeq name="vo.type" value="2"}
<span>类型2:{$vo.name}</span>
{else/}
<span>其他类型:{$vo.name}</span>
{/eq}
{/volist}模板配置
默认配置(template.php)
return [
// 模板路径
"view_path" => "",
// 模板后缀
"view_suffix" => "html",
// 模板开始标记
"tpl_begin" => "{",
// 模板结束标记
"tpl_end" => "}",
// 标签库开始标记
"taglib_begin" => "{",
// 标签库结束标记
"taglib_end" => "}",
// 布局配置
"layout_on" => false,
"layout_name" => "layout",
"layout_item" => "{__CONTENT__}",
// 去除HTML空白
"strip_space" => false,
// 默认模板过滤器
"default_filter" => "htmlspecialchars",
];自定义定界符
如果需要避免与 Vue、React 等前端框架冲突,可以修改定界符:
tpl_begin = <{ // 普通标签开始
tpl_end = >} // 普通标签结束
taglib_begin = < // 标签库开始
taglib_end = > // 标签库结束布局模板
ThinkTemplate 支持布局模板功能,便于统一页面结构:
// 启用布局
layout_on = true,
layout_name = layout,
layout_item = {__CONTENT__},layout.html 示例:
<!DOCTYPE html>
<html>
<head>
<title>{__TITLE__}</title>
</head>
<body>
<header>网站头部</header>
<main>{__CONTENT__}</main>
<footer>网站底部</footer>
</body>
</html>模板渲染
基础渲染
use think\Template;
// 实例化
$template = new Template();
// 渲染输出
$template->fetch("index");
$template->fetch("public/header");
// 渲染并返回
$content = $template->fetch("index");
echo $content;传递变量
$template->assign("name", "ThinkPHP");
$template->assign("list", $data);
$template->fetch("index", ["title" => "首页"]);渲染配置
$config = [
"view_path" => "./template/",
"view_suffix" => "html",
"tpl_begin" => "{",
"tpl_end" => "}",
];
$template = new Template($config);
$template->fetch("index");性能优化
编译缓存:ThinkTemplate 是编译型引擎,模板会编译为 PHP 文件并缓存,无需手动管理
自动更新:当模板文件或布局模板更新时,会自动重新编译
去除空白:启用
strip_space可以移除 HTML 中的空白字符,减少输出体积禁用 PHP:生产环境可以禁用原生 PHP 语法,提高安全性
总结
ThinkTemplate 是一个功能强大且高效的 PHP 模板引擎,特别适合与 ThinkPHP 框架配合使用。其编译型架构保证了优秀的性能,丰富的标签库满足各种业务场景,灵活的扩展机制则让开发者能够轻松定制属于自己的标签。
无论是简单的变量输出还是复杂的业务逻辑,ThinkTemplate 都能提供优雅的解决方案。掌握好本文介绍的内容,你就能熟练运用 ThinkTemplate 进行模板开发了。
