ThinkTemplate模板引擎的设计与使用

 2024-02-11 00:02:49  阅读 0

$tpl=new();

$tpl - ('vo',$vo);

$tpl - ('index.htm');

如果在框架中使用,则不需要创建对象,类会自动创建,只需要赋值并输出即可。

$this-('vo',$vo);

$这个-();

渲染模板时必须指定模板文件名。 如果不指定模板文件名,则会按照系统设定的规则自动定位。 例如,可以将当前模块的操作定位为一个目录,以模块名作为目录。

以下操作对命名模板文件进行操作。 给模板变量赋值时,可以给任意变量赋值,模板标签决定输出的类型。而且赋值具有智能、批量赋值。 默认情况下,第一个参数位于模块中。

板子中输出的变量名,第二个参数是变量的值。 但如果不指定第二个参数,则会判断第一个参数。 如果是索引数组,会自动进行批量赋值。 例如:

$tmpl = 数组();

$tmpl['var1'] = '';

$tmpl['var2'] = '';

$this-($tmpl);

$这个-();

上面的代码会自动分配两个模板变量var1和var2用于模板文件中的输出。 为了安全起见,没有赋值的模板变量不能用于输出,但是一些特殊的模板标签可以输出系统常量和系统变量异常,这个我们后面会提到。

2、主要特点

当然,判断一个模板引擎的优劣,不仅仅看其外表如何使用,更重要的是其内部的功能和效率。 模板引擎的主要功能包括:

 支持XML标签库技术和常用标签定义;

支持混合标签定义;

 生成PHP模板缓存文件;

 模板文件更新后,模板缓存自动更新;

 自动定位当前操作的模板文件,无需指定;

支持编码转换和-Type替换;

 支持模板变量输出前缀,避免变量名冲突;

支持特殊模板变量和常量输出;

支持变量组合调节和格式化功能;

支持标签库扩展模板功能;

综上所述,我们可以从执行速度、模板功能和扩展性三个方面来分析。

执行速度

要准确判断执行速度,首先必须了解解释型模板引擎和编译型模板引擎的区别。

所谓解释型是指每次将模板内容读入内存,通过正则表达式等方法分析字符串后替换预设的标签。 每次加载模板时都需要重复这个过程,就属于这种类型。 编译模板引擎在第一次执行模板文件时会进行一次编译(相当于一个解释分析过程),然后生成编译后的缓存文件。 缓存文件下次执行时可以直接执行,无需再次执行。 编译。 因此,从速度上来说,第一次运行模板时,编译型模板引擎会比解释型模板引擎稍微慢一些。 这是因为严格的编译(包括生成缓存文件)过程。 这个过程取决于模板引擎的复杂程度。 速度与模板页面标签不同。 当第二次执行时,由于已经跳过了最耗时的过程,所以编译后的模板引擎的优势就显现出来了。 这也是编译原理中所谓“空间换时间”的一个例子。 目前,大多数模板引擎都是编译的。 不过编译与否与模板函数没有直接关系。 虽然是解释性的,但是威力也相当大。

它也是一个编译的模板引擎,具有动态生成缓存文件的能力。 无论是修改模板文件还是删除缓存文件,系统都会重新生成缓存文件。 还可以设置模板缓存的有效时间,比如每10分钟重新编译一次模板文件。 并且在编译模板文件的过程中,如果发现有很多相同的标签,则不会重复解析,而是会读取解析缓存。 因此无论是解析还是执行的效率都比较高。

模板功能

模板引擎的一个重要因素就是模板标签的功能。模板引擎以其强大的功能而闻名。 标签的易用性和完整性也是模板引擎的关键因素之一。 最基本的功能包括注释、变量输出、条件控制、封装

包含文件,这些功能是借助一系列模板标签来实现的。 这部分是模板引擎设计的关键,也是工作量比较大的地方。 目前看到的模板引擎标签大致分为两种:特定标签和XML标签。

特定标签通常属于更常见的类型。 它们是模板引擎本身定义的一系列标签,以满足变量输出和控制的需要。 他们通常有私有化规则和不同的标签类型。 在其中,我们称它们为普通模板。 标签。 例如,{$}用于输出PHP的$变量,该变量以[var.tbl.item1]的形式输出。 我还见过其他形式的输出标签,例如{:=},当然还有一些模板引擎旨在定义开始标签。 常见的模板标签使用“{”和“}”作为开始和结束标识符,这与大多数模板引擎一致。 它们还支持开始标记定义。 例如,可以将它们配置为在项目配置文件中使用 [$] 进行输出。 模板变量。

in中的变量输出还具有变量组合调节器的功能,如{$|upper|}。 调节方法可以是系统函数,也可以是自定义函数,还可以设置模板中禁止使用的函数。 它还可以支持多级对象属性或数组的输出,例如:{$vo.name.sub} {$array['name']['sub']}。

除了输出模板变量之外,模板引擎通常还提供一种特殊的标签输出方法来输出一些常量和系统变量。 $Think用于输出一些不需要赋值的特殊或内置变量,类似于$变量。

与其他模板引擎不同,特定标签仅用于变量输出功能,而控制功能和复杂标签功能则放在XML模板标签中。 XML 模板引擎在Java 领域非常常见。 它们在PHP模板引擎领域似乎并不多见。 不过,除了实现自己的特定标签之外,它还有效地借鉴了Java的标签库技术来实现XML模板标签支持。 并允许自定义标签库。 两种标签方式的结合使用可以使模板定义更加灵活,这也是模板引擎的特点。

基于一定的兼容性考虑,通常可以将PHP代码直接插入到模板文件中,以完成模板标签无法完成或难以完成的功能。 这种方法辅以标签,可以满足大多数模板需求。 事实上,当我使用其他模板引擎时,我经常会直接在模板文件中添加一些单独的PHP代码来辅助。 需要注意的是,并非所有模板引擎都支持直接在模板中编写 PHP 代码。

可扩展性

任何模板引擎的功能都不是为你量身定做的。 拥有良好的扩展性机制是模板引擎的另一个考虑因素。 采用插件的方式实现扩展。 由于使用标签库技术,它提供了更强大的定制功能,可以像Java一样支持自定义标签库和标签。 每个XML标签都有独立的解析方法,因此可以根据标签库的定义规则添加和修改标签解析规则。 我国的标签库是以XML命名空间的形式体现的。

例如:

每个命名空间都有一个对应的标签库XML定义文件,同时还包含一个用于解析标签库的类文件。 系统默认支持cx标签库,因此在cx标签库中定义标签时,可以省略XML命名空间前缀。 当系统中有很多标签库时,每次编译都会加载所有标签库解析文件,这会造成浪费,因为很多情况下我们可能只使用其中的一两个标签库。 因此,我们还必须在模板页面实现标签库引入功能,告诉模板引擎当前模板页面需要支持哪些标签库,从而加载需要的解析类。 中,使用标签来实现这个功能,

例如:,

表示支持导入两个标签库:html和cx。 如果没有定义,默认只加载cx标签库。

利用标签库的特性,我们可以很方便地扩展我们需要的标签。 正是这种机制集成了一些常用的HTML组件标签。

例如:

使用上面的自定义 XML 标签来定义组件,无需复杂的 Html 代码。 当模板第一次执行时,模板引擎会将上面的组件标签解析成PHP和Html结合的代码,生成缓存文件。 其中包含的Html标签库封装了许多有价值的Html组件。

3. 标签的使用

可变输出

格式:{$||=arg1,arg2,### }

使用示例:

{$|md5| | =0,3}

{$|=2}

您可以在模板文件中使用 {$info['name'] } 来输出数组变量。

同样,{$var.key}可以用来输出对象属性变量,也支持函数。

系统变量

仍然支持函数使用、大小写和空格,从 Think. 开始,例如

{$Think..} //输出$变量

{$Think..|md5} //输出$变量

{$Think.get.} //输出$_GET变量

{$Think..name} //输出$变量

系统常数

{$Think.const.}

{$Think.const.}

或者直接使用

{$思考。}

{$思考。}

特殊变量

系统定义的常量

{$Think.} //版本

{$Think.now} //现在时间

{$Think.|} //模板页面

{$Think.} //模板标签起始符号

{$Think.} //模板标签结束符号

模板评论

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

格式:{/*评论内容*/ } 或 {//评论内容}

注:页面显示时不会显示模板注释,仅供制作模板时参考。

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

包含模板

当页面需要包含公共文件时,可以使用以下模板标签,

格式:{: }

说明:表示公共文件的名称(不包含后缀,因为模板文件后缀是可配置的),

默认情况下,它在当前目录中搜索,但完全支持相对路径访问。

例如,以下格式都是正确的。 {: } 和{:..// }。 加载公共模板文件后,模板引擎会重新解析页面中的模板标签。 有趣的是,您还可以在公共模板中再次包含公共文件,但请确保不要将其包含在循环中。

例如,.html 文件包含菜单文件 {:menu },index.html 文件包含 and, {: }。 这是首页的内容{:}

访问索引操作方法时,模板首先读取索引文件并开始解析:。 在解析文件的过程中,遇到:menu标签并再次开始解析。 解析完成后,再次解析:标签。 经过多层嵌套包含解析后,索引文件最终被解析为缓存的模板文件。 此外,包含的文件可以设置为变量,定义如下:

{:$} 其中 $ 是模板变量。

XML标签

XML标签技术基本上包含了普通模板的功能,并且有一些增强和补充。 更重要的一点是,新的标签库技术的可扩展性更强。 模板引擎有两个内置标签库实现:CX 和 Html。

在模板页面中使用标签库功能,需要在开始使用标签时导入需要使用的标签,防止日后标签库扩展,增加解析工作量。 用法如下:

引入标签库后,就可以使用标签库中定义的标签来定义模板,例如:

//您可以使用以下模板标签定义。

标签库在使用时忽略大小写,因此以下内容同样有效:

事实上,框架模板引擎会默认加载CX标签库,所以下面的方法具有相同的效果:

而且,默认加载的CX库不需要使用CX命名空间前缀,即

相当于

多重循环的定义也很方便:

{$子名称}

一起使用混合标签的示例:

{$用户名}

{$使用.年龄}

{$用户.电子邮件}

对于不太复杂的变量输出,建议使用{$var}方法,因为纯粹从易用性的角度来说,这种方法是最简单的,功能也比较齐全。

标签库标签定义

CX标签库

CX标签库主要用于输出框架的变量、包含文件以及实现某些控制判断。 有:

包含文件支持的标签属性 file;

模板注解没有label属性;

迭代因子输出,循环内可组合写入标签,支持的标签属性为 id | 名称 | | | 空的;

写入复杂变量输出,包括数组和对象,有函数支持,支持的标签属性有 name | | 关键| |;

数据对象列表输出,循环内可组合vo标签,支持的标签属性为id | 名称 | | | 空的;

vo 数据对象输出,支持的标签属性有 name | | |;

var 变量输出,用于普通变量,支持的标签属性有 name | |;

equal 确定它们是否相同。 支持的标签属性有 name | | 关键| 值|;

判断是否不同;

判断支持的标签属性是否为name | | 钥匙;

判断是否没有定义;

HTML标签库

Html标签库主要用于实现一些Html标签的动态生成和变量封装,主要包括:

动态生成列表;

动态生成;

radio动态生成radio;

link动态加载js或css文件;

带链接的图片;

图像按钮;

多选组件;

列表组件;

4. 总结

作为模板引擎设计,本文仅提供简单的原理说明和简单使用。 细节有很多,比如优化解析效率、包含机制、安全考虑、特殊变量解析、异常处理等。更多关于标签的内容和使用方法可以参见在线手册的相关章节()。

标签: 模板 标签 变量

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码