moay/php-perl-template

此包已被弃用且不再维护。未建议替代包。

0.3.1 2020-01-13 19:44 UTC

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. 简介 1.2. 使用示例 1.3. 创建模板对象 1.4. 模板语法 1.5. 选项 1.6. 添加参数 1.7. 保存和加载编译后的模板

  2. 开发者信息 2.1. 工作原理 2.1.1. 解析 2.1.2. 变量赋值 2.1.3. 变量替换 2.2. 表示法 2.3. 待办事项

  3. 错误

  1. 用户信息

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 标签。然而,它们被允许“破坏规则”。例如

<TMPL_VAR IMAGE_SRC>

并不是真正的有效 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。示例

  1. 在脚本中:$options = array('filename'=>'template.tmpl', 'imark'=>'<', 'emark'=>'>', 'parse_html_tags'=>true);

在模板中

=
  1. 在脚本中:$options = array('filename'=>'template.tmpl', 'imark'=>'[[', 'emark'=>']]', 'parse_html_tags'=>true);

在模板中

= [[TMPL_VAR name="title"]]
  1. 在脚本中:$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)时,在循环内部将提供四个循环上下文变量:firstlastinnerodd,这些变量可以与<TMPL_IF>、<TMPL_UNLESS>和<TMPL_ELSE>一起使用来控制循环的输出方式,以及其他三个变量counterpasspasstotal,这些变量可以与<TMPL_VAR>标签一起使用。(注意:最后两个变量来自htmltmpl;passcounter表示相同的值。)示例

<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()调用的情况下。注意:只有一个循环通过的循环将同时将firstlast设置为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()可以通过多种方式调用

  1. 设置参数的值

    对于简单的 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', ... ) ));

  2. 使用关联数组设置多个参数的值

    $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(); ?>
  1. 开发者信息

在当前状态下,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)。

  1. 错误

该库处于测试阶段,因此可能会有bug。

如果您遇到bug,请向jrpozo@conclase.net发送报告,并指定类文件的版本,同时附上演示问题的示例脚本和示例模板。谢谢。

  1. 变更

版本 0.3.1 - 2002年11月9日 - 修复bug和新增功能

  • 上下文变量 passpasstotal 现在可以正常工作了。
  • 现在 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日 - 首次公开发布