moay / php-perl-template
This package is auto-updated.
Last update: 2022-09-16 19:55:17 UTC
README
这是位于 http://phphtmltemplate.sourceforge.net/ 的原始项目的完整转储。
我只添加了一个命名空间并将其推送到 composer,以便人们可以使用它。
提供时不附带任何类型的保证。请随意提交改进。
################################################################################
PHP-HTML::Template
http://phphtmltemplate.sourceforge.net/
################################################################################
基于 HTML::Template Perl 模块的 PHP 模板系统
版本 0.3.1
2002-11-09
################################################################################
作者:Juan R. Pozo,jrpozo@conclase.net
许可:GNU GPL(包含在文件“LICENSE”中)
(c) 2002 由 Juan R. Pozo 所有
http://html.conclase.net/
http://www.planhost.net/
################################################################################
HTML::Template Perl 模块版权所有 Sam Tregar
################################################################################
请考虑今天捐款。访问我的 amazon.com 愿望单:
http://html.conclase.net/link/wishlist
谢谢 :)
################################################################################
目录
-
用户信息 1.1. 简介 1.2. 使用示例 1.3. 创建模板对象 1.4. 模板语法 1.5. 选项 1.6. 添加参数 1.7. 保存和加载编译后的模板
-
开发者信息 2.1. 工作原理 2.1.1. 解析 2.1.2. 变量赋值 2.1.3. 变量替换 2.2. 表示法 2.3. 待办事项
-
错误
- 用户信息
1.1. 简介
PHP-HTML::Template 是一种用于 PHP 脚本中的模板系统实现,其模板语法与 Sam Tregar 的 HTML::Template Perl 模块相同:[链接](http://html-template.sourceforge.net/)。
HTML::Template 支持变量替换、条件输出、循环构造(非常实用!)和模板包含。
PHP 的类似包是 htmltmpl,由 Tomas Styblo 编写:[链接](http://htmltmpl.sourceforge.net/),从中借鉴了一些功能。
在当前状态下,PHP-HTML::Template 是一组用 PHP 编写的类,但目标是将其转换为 PHP 4 扩展模块,这将使其运行速度更快。
1.2. 使用示例
这是一个示例 PHP 脚本
AddParam("title", "Hello World!"); // 显示输出 $template->EchoOutput(); ?>模板文件
<title></title>结果
<title>Hello World!</title>Hello World!
1.3. 创建模板对象。
在创建模板对象时,必须使用 & 符号,而不是 = 符号
错误:$template = new Template("test.tmpl");
正确:$template =& new Template("test.tmpl");
如果只指定一个参数,则将其视为模板文件名。在这种情况下,模板将以默认选项创建。要指定其他选项,请传递一个包含选项=值对的(关联)数组
$template =& new Template(array("option1"=>"value", "option2"=>"value"));
文档中(第 1.5 节)稍后描述了可用选项。
1.4. 模板语法
模板语法与 HTML::Template 相同,并添加了从 htmltmpl 中借鉴的一些功能。
以下文本已从 HTML::Template 版本 2.5 中改编(原始文本由 Sam Tregar 编写)
标签
TMPL_VAR
<TMPL_VAR NAME="PARAMETER_NAME">
<TMPL_VAR> 标签非常简单。对于模板中的每个 <TMPL_VAR> 标签,您调用 $template->param("PARAMETER_NAME", "VALUE")。当模板输出时,<TMPL_VAR> 将被您指定的 VALUE 文本替换。如果您没有设置参数,则它将在输出中跳过。
可选地,您可以在标签中使用 "ESCAPE=HTML" 选项来指示您希望在输出之前对值进行 HTML 转义(仍然支持旧的 ESCAPE=1 语法)。这意味着所有具有 HTML 字符实体等效项的字符都将转换为这些实体。请注意,在 HTML::Template 中,只有 ", <, >, 和 & 字符被转换)。当您想在可能引起麻烦的上下文中使用 TMPL_VAR 时,这将非常有用。示例
<input name=param type=text value="<TMPL_VAR NAME="PARAM">">
如果您使用类似于 "sam"my 的值调用 AddParam(),您将遇到 HTML 对双引号的理解问题。另一方面,如果您像这样使用 ESCAPE=HTML,
<input name=param type=text value="<TMPL_VAR ESCAPE=HTML NAME="PARAM">">
无论传递给 param 的值是什么,您都将得到您想要的结果。您也可以编写 ESCAPE="HTML",ESCAPE='HTML' 和 ESCAPE='1'。用 0 替换 HTML 将关闭转义,默认情况下就是这种情况。
还有一个 "ESCAPE=URL" 选项,可用于填充 URL 的 VAR。它将执行 URL 转义,例如将 ' ' 替换为 '+' 和 '/' 替换为 '%2F'。
您可以使用 DEFAULT 属性为变量分配默认值。例如,如果未设置 "who" 变量,则将输出 "The devil gave me a taco"。
The <TMPL_VAR NAME=WHO DEFAULT=devil> gave me a taco.
TMPL_LOOP
<TMPL_LOOP NAME="LOOP_NAME"> ... </TMPL_LOOP>
<TMPL_LOOP> 标签比 <TMPL_VAR> 标签要复杂一些。<TMPL_LOOP> 标签允许您定义一段文本并给它一个名字。在这个命名循环内部,您放置 <TMPL_VAR>。现在,您将参数赋值列表(即关联数组的数组)传递给 param(),用于这个循环。循环遍历列表,并为每次传递生成文本块的输出。未设置的参数将被跳过。以下是一个示例
在模板中
<TMPL_LOOP NAME="EMPLOYEE_INFO"> 名称:<TMPL_VAR NAME="NAME">
工作:<TMPL_VAR NAME="JOB">
</TMPL_LOOP>
在脚本中
$template->param("EMPLOYEE_INFO", array(array('NAME' => 'Sam', 'JOB' => '程序员'), array('NAME' => 'Steve', 'JOB' => '售货员') ) ); $template->EchoOutput();
在浏览器中的输出
名称:Sam 工作:程序员
名称:Steve 工作:售货员
如您所见,<TMPL_LOOP> 接收一个变量赋值列表,然后遍历循环体以生成输出。
通常您会希望以编程方式生成 <TMPL_LOOP> 的内容。以下是如何实现这一点的示例(还有许多其他方法!)
// 几组要放入循环中的数据:$words = array("I", "Am", "Cool"); $numbers = array("1", "2", "3");
$loop_data = array(); // 初始化一个数组来保存循环
while ($words and $numbers) { $row_data = array(); // 获取用于行数据的全新数组
// fill in this row
$row_data["WORD"] = array_shift($words);
$row_data["NUMBER"] = array_shift($numbers);
// the crucial step - push this row into the loop!
array_push($loop_data, $row_data);
}
// 最后,将循环数据分配给循环参数 $template->AddParam("THIS_LOOP", $loop_data);
上述示例可以与以下模板一起工作
<TMPL_LOOP NAME="THIS_LOOP"> 单词:<TMPL_VAR NAME="WORD">
数字:<TMPL_VAR NAME="NUMBER">
</TMPL_LOOP>
它会生成如下输出
单词:I 数字:1
单词:Am 数字:2
单词:Cool 数字:3
<TMPL_LOOP> 中的 <TMPL_LOOP> 是可以的,并且会按预期工作。如果您对 param() 调用的语法感到困惑,以下是一个嵌套循环的示例
$template->AddParam("LOOP" => array(array("NAME" => 'Bobby', "NICKNAMES" => array(array("NAME" => 'the big bad wolf'), array("NAME" => 'He-Man') ) ) ) );
基本上,每个 <TMPL_LOOP> 都会得到一个数组。在数组内部可以有任意数量的关联数组。这些数组包含循环模板单次遍历的 name=>value 对。
在一个 <TMPL_LOOP> 内部,可用的唯一变量是来自 <TMPL_LOOP> 的变量。外部块中的变量在模板循环内部是不可见的。对于计算机科学的爱好者来说,<TMPL_LOOP> 会在 PHP 子程序调用中引入一个新的作用域。如果您想使变量全局,可以使用下面描述的 'global_vars' 选项。
TMPL_INCLUDE
<TMPL_INCLUDE NAME="filename.tmpl">
此标签将模板直接包含到当前模板中,位置在找到标签的地方。包含的模板内容将像其内容物理包含在主模板中一样被使用。
文件名直接传递给 fopen()。
[注意:HTML::Template 按以下步骤操作:指定的文件可以是绝对路径(例如,在 Unix 下以 '/' 开头)。如果不是绝对路径,则尝试包含文件的路径。之后,如果存在,尝试环境变量 HTML_TEMPLATE_ROOT 中的路径。接下来,咨询 "path" 选项。作为最后的尝试,直接将文件名传递给 open()。有关 HTML_TEMPLATE_ROOT 和 "path" 选项的更多信息,请参见下面的 new() 选项。]
为了防止无限递归包含,强制执行了10级深度的任意限制。您可以使用 "max_includes" 选项更改此限制。有关更多详细信息,请参见下面的 "max_includes" 选项条目。
TMPL_IF
<TMPL_IF NAME="PARAMETER_NAME"> ... </TMPL_IF>
<TMPL_IF> 标签允许您根据给定参数名称的值来决定是否包含模板中的某个块。如果参数被赋予 PHP 中表示为真值的 '1',则该块将包含在输出中。如果没有定义或赋予表示为假值的 '0',则将跳过该块。参数的指定方式与 TMPL_VAR 相同。
示例模板
<TMPL_IF NAME="BOOL"> 只有当 BOOL 为真时才显示的文本!</TMPL_IF>
现在,如果您调用 $template->AddParam("BOOL", 1),那么上述块将被包含在输出中。
<TMPL_IF> </TMPL_IF> 块可以包含任何有效的 HTML::Template 构造 - VAR、LOOP 以及其他 IF/ELSE 块。注意,然而,<TMPL_IF> 和 <TMPL_LOOP> 的交叉是无效的。
以下用法不会工作:<TMPL_IF BOOL> <TMPL_LOOP SOME_LOOP> </TMPL_IF> </TMPL_LOOP>
如果 TMPL_LOOP 的名称在 TMPL_IF 中使用,IF 块将在循环至少有一行时输出。例如
<TMPL_IF LOOP_ONE> 如果循环不为空,则将输出此内容。</TMPL_IF>
<TMPL_LOOP LOOP_ONE> .... </TMPL_LOOP>
警告:PHP-HTML::Template 的许多好处在于解耦 PHP 和 HTML。如果您引入了大量的 TMPL_IF 和匹配的 PHP if() 的情况,您将创建一个维护问题,以保持两者同步。我建议您只使用 TMPL_IF,如果您可以在不要求在 PHP 代码中匹配 if() 的情况下做到这一点。
TMPL_ELSE
<TMPL_IF NAME="PARAMETER_NAME"> ... <TMPL_ELSE> ... </TMPL_IF>
您可以使用 TMPL_ELSE 在 TMPL_IF 块中包含一个替代块。注意:您仍然需要用 </TMPL_IF> 而不是 </TMPL_ELSE> 来结束块!
示例
<TMPL_IF BOOL> 只有当 BOOL 为真时才包含的文本 <TMPL_ELSE> 只有当 BOOL 为假时才包含的文本 </TMPL_IF>
TMPL_UNLESS
<TMPL_UNLESS NAME="PARAMETER_NAME"> ... </TMPL_UNLESS>
此标签是 <TMPL_IF> 的对立面。如果控制参数设置为假或未定义,则输出该块。您可以使用 <TMPL_ELSE> 与 <TMPL_UNLESS> 一样,就像您使用 <TMPL_IF> 一样。
示例
<TMPL_UNLESS BOOL> 只有当 BOOL 为假时才输出的文本。<TMPL_ELSE> 只有当 BOOL 为真时才输出的文本。</TMPL_UNLESS>
如果 TMPL_LOOP 的名称在 TMPL_UNLESS 中使用,当循环为零行时,将输出 UNLESS 块。
<TMPL_UNLESS LOOP_ONE> 如果循环为空,则将输出此内容。</TMPL_UNLESS>
<TMPL_LOOP LOOP_ONE> .... </TMPL_LOOP>
注释
HTML::Template 的标签旨在模仿常规 HTML 标签。然而,它们被允许“破坏规则”。例如
并不是真正的有效 HTML,但它是一个完全有效的使用,并按计划工作。
标签中的 "NAME=" 是可选的,尽管出于可扩展性的原因,我建议使用它。例如 - "<TMPL_LOOP LOOP_NAME>" 是可接受的。
如果您是一个对有效 HTML 如痴如醉的粉丝,并且希望您的模板符合有效 HTML 语法,您可以选择性地用 HTML 注释的形式键入模板标签。这可能对希望在 HTML::Template 处理之前验证模板的 HTML 语法或使用 DTD 知觉的编辑工具的 HTML 作者有用。
为了实现带宽的显著节省,本文档中将使用标准的(非注释)标签。
[注意:当在属性值中使用模板标签时,即使您使用注释标签,也无法验证模板文件。请参见以下内容(第 1.5.5 节中的 imark 和 emark 选项)以获取解决方案。]
1.5. 选项。
您可以在使用 new 创建 Template 对象时修改其行为。以下选项可用:
1.5.1. 解析时选项
strict - 如果设置为 0,模块将允许类似 TMPL_* 标签的事物通过而不会导致错误。例如
<TMPL_ HUH NAME=ZUH>
通常会导致错误,但如果您将 new 中的 strict 设置为 0,HTML::Template 将忽略它。默认值为 1。
vanguard_compatibility_mode - 如果设置为 1,模块将期望看到类似 %NAME% 的 <TMPL_VAR>,除了标准语法。同时设置 die_on_bad_params => 0。如果您不是在 Vanguard 媒体尝试使用旧格式模板,无需担心此选项。默认值为 0。
no_includes - 将此选项设置为 1 以禁止在模板文件中使用 <TMPL_INCLUDE> 标签。这可以用来使打开不受信任的模板稍微不那么危险。默认值为 0。
max_includes - 将此变量设置为确定 includes 可以达到的最大深度。默认设置为 10。包含文件深度超过此值将显示错误消息。
hash_comments - (此选项在 HTML::Template 中未实现)。允许插入类似于 htmltmpl 的哈希注释。哈希注释如下
<TMPL_VAR NAME="name"> ### 三个井号表示注释
如果此选项设置为 1,将删除这些注释。
case_sensitive - 将此选项设置为 true 将导致 HTML::Template 逐字面地处理模板变量名称。以下示例在没有 "case_sensitive" 选项的情况下只会设置一个参数
$template = & new Template('filename', 'template.tmpl', 'case_sensitive', 1); $template->Addparam( 'FieldA', 'foo', 'fIELDa', 'bar', );
此选项默认为关闭。
注意:在 case_sensitive 和 loop_context_vars 的情况下,特殊循环变量仅以小写形式可用。
imark - (此选项在 HTML::Template 中未实现)。允许指定模板标签的初始标记。默认值是 <
emark - (此选项在 HTML::Template 中未实现)。允许指定模板标签的结束标记。默认值是 >
示例
脚本
'template.tmpl', 'imark'=>'[[', 'emark'=>']]'); $template = & new Template(&$options); $template->AddParam('title'=>'Hello world!'); $template->EchoOutput(); ?>模板
<title>[[TMPL_VAR NAME="title"]]</title>[[TMPL_VAR NAME="title"]]
parse_html_tags - (此选项在 HTML::Template 中未实现)。告诉解析器在 HTML 注释内查找模板标签。如果您在 HTML 注释中包含任何模板标签以使模板成为有效标记,请保留此选项为 true。否则将其设置为 false,这将使解析稍微快一些。默认值为 true。示例
- 在脚本中:$options = array('filename'=>'template.tmpl', 'imark'=>'<', 'emark'=>'>', 'parse_html_tags'=>true);
在模板中
=- 在脚本中:$options = array('filename'=>'template.tmpl', 'imark'=>'[[', 'emark'=>']]', 'parse_html_tags'=>true);
在模板中
= [[TMPL_VAR name="title"]]- 在脚本中:$options = array('filename'=>'template.tmpl', 'imark'=>'<[', 'emark'=>']>', 'parse_html_tags'=>true);
在模板中
= <[TMPL_VAR name="title"]>注意当初始标记以 < 符号开始或当结束标记以 > 符号结束时使用的语法。这样做是为了与现有的 HTML::Template 模板保持兼容性。
1.5.2. 输出时选项
die_on_bad_params - 如果设置为 0,模块将允许您调用 $template->AddParam(param_name => 'value') 即使 'param_name' 不在模板正文中。默认值为 1。
loop_context_vars - 当此参数设置为true(默认为false)时,在循环内部将提供四个循环上下文变量:first、last、inner、odd,这些变量可以与<TMPL_IF>、<TMPL_UNLESS>和<TMPL_ELSE>一起使用来控制循环的输出方式,以及其他三个变量counter、pass和passtotal,这些变量可以与<TMPL_VAR>标签一起使用。(注意:最后两个变量来自htmltmpl;pass和counter表示相同的值。)示例
<TMPL_LOOP NAME="FOO"> 通过 <TMPL_VAR NAME="pass"> 的 <TMPL_VAR NAME="passtotal">
<TMPL_IF NAME="first"> 这只会在第一次循环时输出。
</TMPL_IF>
<TMPL_IF NAME="__odd__">
This outputs every other pass, on the odd passes.<br>
</TMPL_IF>
<TMPL_UNLESS NAME="__odd__">
This outputs every other pass, on the even passes.<br>
</TMPL_IF>
<TMPL_IF NAME="__inner__">
This outputs on passes that are neither first nor last.<br>
</TMPL_IF>
<TMPL_IF NAME="__last__">
This only outputs on the last pass.<br>
<TMPL_IF>
</TMPL_LOOP>
此功能的一个用途是提供一个类似于PHP函数join()的“分隔符”。示例
<TMPL_LOOP FRUIT> <TMPL_IF last> and </TMPL_IF> <TMPL_VAR KIND> <TMPL_UNLESS last>, <TMPL_ELSE>.</TMPL_UNLESS> </TMPL_LOOP>
将在浏览器中输出类似的内容
Apples, Oranges, Brains, Toes, and Kiwi。
当然,在有适当的AddParam()调用的情况下。注意:只有一个循环通过的循环将同时将first和last设置为true,但不会设置inner。
global_vars - 通常,在循环外部声明的变量在循环内部不可用。此选项使<TMPL_VAR>类似于PHP中的全局变量 - 它具有无限的作用域。此选项还会影响<TMPL_IF>和<TMPL_UNLESS>。
示例
这是一个普通变量:<TMPL_VAR NORMAL>。
<TMPL_LOOP NAME=FROOT_LOOP> 这里它在循环内部:<TMPL_VAR NORMAL>
</TMPL_LOOP>
通常这不会按预期工作,因为循环外部<TMPL_VAR NORMAL>的值在循环内部不可用。
global_vars选项还允许您访问内循环中包围循环的值的值。例如,在这个循环中,内循环将能够访问正确的迭代中的OUTER_VAR的值
<TMPL_LOOP OUTER_LOOP> OUTER: <TMPL_VAR OUTER_VAR> <TMPL_LOOP INNER_LOOP> INNER: <TMPL_VAR INNER_VAR> INSIDE OUT: <TMPL_VAR OUTER_VAR> </TMPL_LOOP> </TMPL_LOOP>
与htmltmpl一样,您可以使用GLOBAL属性仅针对一个变量,而不是设置global_vars。为此,请将GLOBAL属性添加到标签中,如下所示
<TMPL_LOOP LOOP> <TMPL_VAR NAME="COUNTRY" GLOBAL="1">
<TMPL_VAR NAME="NAME"> </TMPL_LOOP>
1.5.3. 通用选项
debug - 如果设置为1,模块将输出详细的调试信息。默认为0。
1.5.4. 文件系统选项
注意:这些选项尚未实现,但计划实现。
path - 您可以使用此变量设置一个路径列表,用于搜索new()中指定的“filename”选项指定的文件以及使用<TMPL_INCLUDE>标签包含的文件。此列表仅在文件名是相对的情况下才会被查询。如果存在,始终尝试HTML_TEMPLATE_ROOT环境变量。对于<TMPL_INCLUDE>文件,在查询path之前也会尝试包括文件的路径。
示例
$template =& new Template('filename', 'file.tmpl', 'path', array('/path/to/templates', '/alternate/path'));
注意:path列表中的路径必须用正斜杠字符('/')表示为UNIX路径。
search_path_on_include - 如果设置为true值,则模块将在每次<TMPL_INCLUDE>时从path选项指定的路径数组中搜索,并使用找到的第一个匹配模板。默认行为是在当前目录中仅查找要包含的模板。默认为0。
1.6. 添加参数
AddParam()可以通过多种方式调用
-
设置参数的值
对于简单的 TMPL_VARs
$template->AddParam('PARAM', 'value');
对于 TMPL_LOOPs
$template->AddParam('LOOP_PARAM', array( array('PARAM' => 'VALUE_FOR_FIRST_PASS', ... ), array('PARAM' => 'VALUE_FOR_SECOND_PASS', ... ) ));
-
使用关联数组设置多个参数的值
$template->AddParam(array( 'PARAM' => 'value', 'PARAM2' => 'value', 'LOOP_PARAM' => array(array('PARAM' => 'VALUE_FOR_FIRST_PASS', ...), array('PARAM' => 'VALUE_FOR_SECOND_PASS', ...), ...), 'ANOTHER_LOOP_PARAM' => array(array('PARAM' => 'VALUE_FOR_FIRST_PASS', ...), array('PARAM' => 'VALUE_FOR_SECOND_PASS', ...), ...) ) );
请注意,使用(名称,值)对的函数调用不再有效。
1.7. 保存和加载编译后的模板
要保存编译后的模板,请调用 SaveCompiled($dir, $overwrite) 方法。第一个参数是要存储编译后的模板文件的目录名称。如果它是 NULL 或未指定,则使用原始模板文件的目录名称。编译后的模板文件名是原始模板名称后追加一个 "c" 字符。如果已存在同名文件,则函数将带错误退出,除非 $overwrite 参数设置为 true(默认为 0)。
返回编译后模板的路径。示例
SaveCompiled(".")) { echo ("$output saved"); } ?>如果您在保存编译后的模板之前分配变量,则分配的值也会被存储。
要加载编译后的模板,请使用 LoadCompiledTemplate 函数,并将编译后的模板文件名作为参数。一旦加载,请按常规进行。示例
AddParam("title", "Hellow world!"); $template->EchoOutput(); ?>- 开发者信息
在当前状态下,PHP-HTML::Template 是一组用 PHP 编写的类,但目标是将其转换为 PHP 4 扩展模块,这将使其运行速度更快。
尽管(显然)它基于 HTML::Template,但代码是从头开始编写的,即它不是直接移植到 PHP。新的 PHP 类有更少的选项(根本没有缓存选项),但现有的模板应该完全兼容。
2.1. 工作原理
2.1.1. 解析
TO DO
2.1.2. 变量赋值
在解析模板文件后,用户可以给模板提供用于变量替换的值。如果 case_sensitive 选项关闭,则变量名称和传递给 AddParam() 函数的数组的键被转换为小写。
2.1.3. 变量替换
TO DO
2.2. 符号表示法
对于 PHP 类,除了初始注释块外,遵循 PEAR 符号表示法。
对于函数名称
function FunctionName() {
}
对于变量名称
var $firstSecondWord;
对于 C 模块,遵循 PHP 源代码的正常约定。
2.3. TO DO
-
此项目的主要目标是创建一个 PHP4 扩展模块。在此任务中,您的帮助非常受欢迎。
-
检查解析算法,特别是创建一个不会失败的分割正则表达式。
-
创建一个全面的测试套件,并测试当前库。
-
实现与 HTML::Template 相同的过滤器。
-
允许在 IF/UNLESS 标签中进行比较。
-
A <TMPL_SWITCH NAME> / <TMPL_CASE VALUE> 结构可能很有用。
-
完成此文件中的“开发者信息”部分。
-
实现 <TMPL_DEFINE NAME="CONSTANT" VALUE="something"> 和 <TMPL_CONSTANT NAME="CONSTANT"> 标签,这些标签将被包含在解析树中作为标记节点;这些通常由模板设计者使用。
-
实现 __EVERY__x 属性,如 htmltmpl 中的那样。
-
考虑直接打印输出而不是先写入 $output 再打印 $output。
-
在加载编译后的模板后,提供一种安全的方法来更改选项。
-
更多转义选项:RAWURL(PHP的rawurlencode())、URLONLY(urlencode())、ALLHTML(htmlentities())、MYSQL(mysql_escape_string())、SLASHES(addslashes())、META(quotemeta()/preg_quote())、JS(javascript escapes)。
-
大小写格式化(ucwords、lcucwords、ucfirst、lcucfirst、toupper、tolower)。
- 错误
该库处于测试阶段,因此可能会有bug。
如果您遇到bug,请向jrpozo@conclase.net发送报告,并指定类文件的版本,同时附上演示问题的示例脚本和示例模板。谢谢。
- 变更
版本 0.3.1 - 2002年11月9日 - 修复bug和新增功能
- 上下文变量 pass 和 passtotal 现在可以正常工作了。
- 现在 loop_context_vars 选项可以正常工作了。
- 当模板属性中有空格时,解析器曾经崩溃,现在已修复。
- 当转义到URL格式时出现的愚蠢bug已修复。
- 另一个导致所有值都被HTML转义的愚蠢bug也已修复。
- 如果循环变量被赋予了标量值,类会坚持遍历其行,这会导致致命错误 - 现在至少它会给出解释。
- 添加了上下文变量 counter(等于 pass)。
- 为VAR标签添加了新的DEFAULT属性。
- global_vars 现在影响嵌套循环内的循环。
- 如果设置了 loop_context_vars 和 case_sensitive 选项,上下文变量只以小写形式可用。
- 一些调试信息是西班牙语的。现在所有内容都是英文的,调试信息更加丰富。
- 已更新README文件。
对于所有的bug,我们深感抱歉。
版本 0.3 - 2002年11月6日 - 从头重写了类。它原来太慢了。解析树不再是一个树,而是一个列表,我们在必要时跳转,并使用栈来跟踪循环/条件语句。现在快多了!不再需要“紧凑类”。
当然,已更新README文件。
版本 0.2.2 - 2002年8月8日 - 添加了两个功能:一个用于保存编译后的模板(实际上,是一个序列化的模板对象),另一个用于将编译后的模板加载到内存中。
修复了 max_includes bug。
已更新README文件。
版本 0.2 - 2002年8月3日 - 现在用户可以通过 imark 和 emark 选项指定自己的标签样式。默认是 < 作为起始标记和 > 作为结束标记,但用户可以选择任何其他组合(我想),只要两个标记不同。请参见选项描述中的上方以获取更多详细信息。不幸的是,解析函数现在更加复杂。有一个新选项称为 parse_html_tags。当它设置为 false 时,Parse() 跳过了扫描模板标签的部分,这可以提高性能。如果您不在HTML注释中使用模板标签,请将该选项设置为 false(默认值为 true)。
如果模板标签被拆分成多行,解析器会崩溃。现在已修复。
已扩展并修正了README文件中的某些点。
版本 0.1.1 - 2002年8月2日 - 修复了类中的小错误,在README文件中添加了一些内容,将LICENSE文件添加到包文件中。
版本 0.1 - 2002年8月1日 - 首次公开发布