ThinkTemplate 模板引擎完全指南

码匠3周前PHP5260

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");

性能优化

  1. 编译缓存:ThinkTemplate 是编译型引擎,模板会编译为 PHP 文件并缓存,无需手动管理

  2. 自动更新:当模板文件或布局模板更新时,会自动重新编译

  3. 去除空白:启用 strip_space 可以移除 HTML 中的空白字符,减少输出体积

  4. 禁用 PHP:生产环境可以禁用原生 PHP 语法,提高安全性

总结

ThinkTemplate 是一个功能强大且高效的 PHP 模板引擎,特别适合与 ThinkPHP 框架配合使用。其编译型架构保证了优秀的性能,丰富的标签库满足各种业务场景,灵活的扩展机制则让开发者能够轻松定制属于自己的标签。

无论是简单的变量输出还是复杂的业务逻辑,ThinkTemplate 都能提供优雅的解决方案。掌握好本文介绍的内容,你就能熟练运用 ThinkTemplate 进行模板开发了。

相关文章

在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池

在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池 现代软件的构建最终仍然要回到实践。再复杂的产品,也必须经过真实用户的检验。只有最终用户,才能真正区分哪些设计是有...

ThinkPHP8.X模型关联详解

在ThinkPHP框架中,模型关联是处理数据表数据表之间关系的重要机制。通过模型关联,我们可以方便地操作具有关联关系的数据,如一对一、一对多、多对多等关系。本文将详细介绍ThinkPHP中常见的模型关...

ThinkPHP3.2.3 升级 ThinkPHP8.1 实战指南

从 ThinkPHP3.2.3 跳跃升级至 ThinkPHP8.1,核心难点在于底层 API、语法规范、目录结构的大幅变更。本文覆盖控制器、模型、路由、验证、数据库操作等核心模块,通过“TP3.2.3...

ThinkPHP5.0.24 升级 ThinkPHP8.1 实战指南

从 ThinkPHP5.0.24 升级至 ThinkPHP8.1,虽无 TP3 升级的跨度大,但核心差异体现在命名空间规范、ORM 语法、路由机制、验证体系及 PHP 版本兼容(TP8 要求 PHP8...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。