服务器测评网
我们一直在努力
广告
广告
广告
广告
广告
广告
广告
广告
广告

think-template——基于ThinkPHP的独立模板引擎

广告
广告

介绍

think-template是一个基于PHP5.6+实现的编译型模板引擎,主要特性包括:

  • 支持XML标签库和普通标签的混合定义;
  • 支持直接使用PHP代码书写;
  • 支持文件包含;
  • 支持多级标签嵌套;
  • 支持布局模板功能;
  • 一次编译多次运行,编译和运行效率非常高;
  • 模板文件和布局模板更新,自动更新模板缓存;
  • 系统变量无需赋值直接输出;
  • 支持多维数组的快速输出;
  • 支持模板变量的默认值;
  • 支持页面代码去除Html空白;
  • 支持变量组合调节器和格式化功能;
  • 允许定义模板禁用函数和禁用PHP语法;
  • 通过标签库方式扩展;

功能特性和ThinkPHP5.1内置的模板引擎基本一致,适用于没有使用ThinkPHP框架但希望找一个高性能的编译型模板引擎的情况。

安装

通过composer直接安装即可

composer require topthink/think-template

用法示例

在根目录下创建index.php入口文件测试:

<?php
namespace think;

require __DIR__.'/vendor/autoload.php';

// 设置模板引擎参数
$config = [
    // 模板文件目录
    'view_path'   => './template/',
    // 模板编译缓存目录(可写)
    'cache_path'  => './runtime/',
    // 模板文件后缀
    'view_suffix' => 'html',
];

$template = new Template($config);
// 模板变量赋值
$template->assign('name','thinkphp');
// 读取模板文件渲染输出
$template->fetch('index');

更多的模板引擎参数可以参考

fetch方法必须指定模板文件名(不需要后缀和路径),上面的代码对应的模板文件位于 ./template/index.html

然后就可以在模板文件中输出模板变量

Hello,{$name}!

执行入口文件应该会看到输出

Hello,thinkphp!

变量输出的定界符支持自定义,例如:

$config = [
    // 模板文件目录
    'view_path'   => './template/',
    // 模板编译缓存目录(可写)
    'cache_path'  => './runtime/',
    // 模板文件后缀
    'view_suffix' => 'html',
    // 模板引擎普通标签开始标记
    'tpl_begin'   => '{', 
    // 模板引擎普通标签结束标记
    'tpl_end'      > '}', 
];

如果要批量给模板变量赋值,可以用

// 批量赋值
$template->assign([
    'name'   =>    'thinkphp',
    'foo'    =>    'bar',
]);

支持直接渲染内容输出,不需要定义模板文件

$template = new Template($config);
// 模板变量赋值
$template->assign('name','thinkphp');
// 渲染内容输出
$content = 'Hello,{$name}!';
$template->display($content);

所有的模板变量默认输出都会自动进行转义处理,以避免XSS攻击的可能性。如果你不需要进行任何的转义,可以使用|raw保持原样不做转义输出(例如输出HTML内容的时候需要)。

Hello,{$name|raw}!

数组和对象输出

如果需要在模板中输出数组,可以使用

{$item.name}
// 或者
{$item['name']}

要输出对象的属性,可以使用

{$object->name}

也可以直接调用对象的常量或者方法

常量:{$object::CONST_NAME}
方法:{$object->method()}

支持函数

{$name|strtolower|strip_tags}

系统变量输出

如果需要输出系统变量,可以不需要赋值给模板变量然后输出,可以直接在模板文件中输出系统变量,例如:

{$Think.server.script_name} // 输出$_SERVER['SCRIPT_NAME']变量
{$Think.session.user_id} // 输出$_SESSION['user_id']变量
{$Think.get.page} // 输出$_GET['page']变量
{$Think.cookie.name}  // 输出$_COOKIE['name']变量

支持输出 $_SERVER$_ENV、 $_POST、 $_GET、 $_REQUEST$_SESSION和 $_COOKIE变量。

如果系统常量直接使用

{$Think.PHP_VERSION}

运算符

我们可以对模板输出使用运算符,包括如下支持。

运算符 使用示例
+ {$a+$b}
- {$a-$b}
* {$a*$b}
/ {$a/$b}
% {$a%$b}
++ {$a++} 或 {++$a}
-- {$a--} 或 {--$a}
综合运算 {$a+$b*10+$c}

在使用运算符的时候,不再支持前面提到的函数过滤用法,例如:

{$user.score+10} //正确的
{$user['score']+10} //正确的
{$user['score']*$user['level']} //正确的
{$user['score']|myFun*10} //错误的
{$user['score']+myFun($user['level'])} //正确的

三元运算

模板可以支持三元运算符,例如:

{$status? '正常' : '错误'}
{$info['status']? $info['msg'] : $info['error']}
{$info.status? $info.msg : $info.error }

还支持如下的写法:

{$name ?? '默认值'}

原样输出

可以使用literal标签来防止模板标签被解析,例如:

{literal}
    Hello,{$name}{/literal}

上面的{$name}标签被literal标签包含,因此并不会被模板引擎解析,而是保持原样输出。

literal标签还可以用于页面的JS代码外层,确保JS代码中的某些用法和模板引擎不产生混淆。

总之,所有可能和内置模板引擎的解析规则冲突的地方都可以使用literal标签处理。

模板注释

模板支持注释功能,该注释文字在最终页面不会显示,仅供模板制作人员参考和识别。

单行注释

格式:

{/* 注释内容 */ }{// 注释内容 } 

例如:

{// 这是模板注释内容 }

注意{和注释标记之间不能有空格。

多行注释

支持多行注释,例如:

{/* 这是模板
注释内容*/ }

模板注释支持多行,模板注释在生成编译缓存文件后会自动删除,这一点和Html的注释不同。

好主机测评广告位招租-300元/3月
赞(0) 打赏
未经允许不得转载:好主机测评网 » think-template——基于ThinkPHP的独立模板引擎
好主机测评广告位招租-200元/3月
好主机测评广告位招租-100元/3月

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫