使用 PHP 4.0 和 FastTemplate 1.1.0 进行 Web 开发
关于 Web 开发业务的一件事:我们使用的软件工具发展如此迅速,以至于很难跟上它们的步伐。一年前,我什至没有听说过 Web 脚本语言 PHP。今天,我在工作中全职编写 PHP 代码。
我们那里有两支团队:一支团队严格使用基于 Red Hat Linux 的 PC 编写 PHP 代码,另一支团队严格使用基于 NT 的 PC 上的 DreamWeaver 进行图形设计。营销部门勾勒出页面;图形团队构建页面,页面的数据部分被存根化。代码团队接手,并利用 PHP 与 HTML 无缝集成的能力,将活动数据带入页面存根。
这一切都很好——直到有人想要更改,例如,站点中 46 个页面上出现的某个提交按钮上的文本。这意味着现在必须对 46 个文件进行 46 次更改,仅仅是为了更改一个小按钮的外观!感谢 grep。
但是有一种方法可以避免所有这些,这就是本文的主题。通过使用 HTML 模板,可以通过对一个文件进行简单更改来修复上面提到的按钮。模板实现了 PHP 代码和 HTML 的物理分离。对 PHP 代码的更改绝不会影响 HTML,反之亦然。
模板的运作方式如下:PHP 程序打开并解析包含页面 HTML 的外部文件。HTML 文件包含将在运行时替换的数据占位符。标签通常看起来像:{ITEM}。当遇到标签时,PHP 程序会将正确的数据替换为该标签。这样,PHP 代码文件可以与 HTML 文件完全分离,并且编码人员和设计人员不会意外地搞砸彼此的工作。
有几种可用的开源模板包。有些比其他更强大和复杂。我个人认为,在执行速度和易用性之间取得良好平衡的一个软件包是 CDI 的 FastTemplate 1.1.0。作者 Joe Harris 已根据通用艺术许可证发布了 FastTemplate。Joe 在文档中写道,FastTemplate 1.1.0 实际上是同名 Perl 模块的 PHP 端口。Perl 模块由 Jason Moore 编写。
使用 FastTemplate 的想法是将网页分解为其最基本的组件:单个按钮、复选框,甚至文本行。表格必须分解为标题和行,行必须分解为单元格。每个组件都有自己的文件,其中包含静态 HTML 和用于可变数据的特殊标签。然后,页面由这些简单的组件构建而成。最后,您最终得到一个像我们的 main.tpl 这样的文件,其中仅包含标签 {BODY}。有些人更喜欢称之为 {CONTENT};确切的名称无关紧要。此顶级标签被替换为整个页面的数据。如果需要,它甚至可以是您站点中每个页面的顶级文件。因此,对此文件的更改将更改您整个站点的外观。我们将在示例程序中完全做到这一点。
这里有几个积极的含义。要使用模板,您需要将所有页面的确切内容绝对精确到最后一个细节,因为您将为页面上的每个小部件制作模板文件。这很好,因为它迫使您成为一名工程师,并且很难成为一名黑客。事后添加功能将需要至少更改三个文件,而不仅仅是一个。您的网站会因此而变得更好,因为您的设计将更加彻底、详细和更仔细地计划。
早期,看起来您正在累积大量非常小的模板文件,虽然这是事实,但模板在很大程度上是可重用的。随着应用程序规模的增长,模板文件的比例会缩小。您也可以在一个模板文件中放置多个数据标签。这减少了模板文件的数量,但也降低了模板的可重用性。
为了了解 FastTemplate 可以为网站可维护性做些什么,让我们看看它的实际应用。我假设您可以访问已运行 Apache、PHP 和关系数据库(我使用的是 MySQL)的 Linux 服务器,并且您可以更改通常由 root 拥有的几个文件和目录。
安装 FastTemplate 非常容易。主页是 www.thewebmasters.net/php/FastTemplate.phtml。下载文件 FastTemplate-1_1_0.tar.gz,如果您运行的是 PHP 4.0,则同时下载 diff 文件 (php4.diff)。将下载内容移动到您的文档根目录并解压缩。将创建目录 FastTemplate/。如果您运行的是 PHP 4.0,请将 php4.diff 放在 FastTemplate/ 中并运行以下命令
patch class.FastTemplate.php3 php4.diff mv class.FastTemplate.php3 class.FastTemplate.php
然后,将 class.FastTemplate.php 移动到您的 PHP 包含目录。如果您不确定此目录在哪里,请检查文件 php.ini。默认情况下,它位于 /usr/local/lib/ 中。查找“include path”设置。也可以使用 include( ) 语句将 class.FastTemplate.php 显式包含到 PHP 程序中,但这需要额外的工作,而且我往往会忘记这样做。这就是 FastTemplate 的安装。
接下来,在您的文档根目录下的某个位置为本示例的文件创建另一个目录。您将需要清单 1、清单 2 和清单 3 中的文件。清单 4 将需要分解为单个模板文件 [请参阅 ftp://ssc.com/pub/lj/listings/issue86/]。
这个例子虽然简短而简单,但说明了 FastTemplate 可以轻松处理在行和列中都是动态的表。就页面的单个元素而言,这已经是最复杂的了。
看看清单 1。要使用 FastTemplate,我们只需包含 class.FastTemplate.php 并声明一个实例。我们声明中的 (“.”) 表明我们的支持模板位于当前目录中。它们可以很容易地位于另一个目录中。FastTemplate 类有四个主要方法:define( )、assign( )、parse( ) 和 print( )。
define( ) 方法将外部文件名映射到我们的程序将使用的句柄。请注意,模板不必以 .tpl 结尾。您可能在任何程序中只需要调用一次 define( )。
assign( ) 方法将数据标签(减去 {})映射到我们要替换它们的数据。您的程序中可以有很多 assign( ) 调用。首先处理最小、最基本的组件,并使用它们构建更复杂的组件。
对我来说,parse( ) 是最难理解的方法。此方法解析模板,进行数据标签替换,并将结果存储在局部变量中。局部变量是 parse( ) 的第一个参数。第二个参数是我们在 define( ) 中定义的句柄。如果 parse( ) 的第二个参数以“.”开头,我们将新值附加到先前的值(如果有)。我们使用此技术来填充示例中的数据库选择器。PHP 程序的主要功能将用于检索或计算用于分配和解析的数据。
最后,print( ) 默认输出最近解析的内容。我们也可以将解析后的结果作为参数传递给它。一个页面上可以有多个 print( ),有时这是在屏幕上显示页面的最简单方法。而且,通常有多种生成页面的方法。如果它有效且高效,那就很好。
所以让我们看看这个例子。使用浏览器加载清单 1 中的示例,您应该会看到类似于图 1 的内容。使用选择器选择数据库,输入查询,按 EXECUTE 按钮,然后显示查询结果(参见图 2)。
现在,假设您扮演图形设计师的角色。您的工作是彻底改变整个应用程序的外观。您想象中的老板刚刚说灰色背景必须消失——他想要黄色。他希望所有内容都位于页面中心,而不是左对齐。顺便说一句,他希望所有文本都是绿色的。使用基于 FastTemplate 的站点,您可以在不到一分钟的时间内通过编辑顶级模板文件 main.tpl 来实现所有这些更改。
存在更好的 Web 编辑器,但 Netscape Composer 可以完成这项工作。以下是操作方法:在 Netscape Navigator 中,选择文件 --> 打开页面。在出现的对话框中,输入或浏览到示例目录中 main.tpl 的完整路径,然后单击“在 Composer 中打开”。Netscape Composer 将打开一个大窗口,其中在 composer 编辑区域中显示一个单词 {BODY}(参见图 3)。那是 main.tpl 的 HTML 渲染版本。要进行老板的更改,首先选择编辑 --> 全选。{BODY},包括括号,应以黄色突出显示。现在选择格式 --> 对齐 --> 居中。这样就完成了居中。再次选择编辑 --> 全选。现在选择格式 --> 文本颜色,并从色板选择器中选择一种漂亮的深绿色。单击“确定”。您现在应该看到 {BODY} 为深绿色。这是第二个,还剩一个。选择格式 --> 页面颜色和属性。在“颜色和背景”选项卡顶部的单选按钮组中选择“使用自定义颜色”按钮。然后选择“背景”。从出现的对话框中的“色板”选项卡中选择黄色。单击“确定”、“应用”和“再次确定”。您在 Composer 中的背景应该已经是黄色的。现在选择文件 --> 保存,然后选择文件 --> 关闭。
现在从示例中重新加载查询页面。所有三个更改现在都应该生效:黄色背景、绿色文本和所有内容居中,但应用程序仍应像以前一样以编程方式工作(参见图 4 和图 5)。虽然这个例子非常简单,但我认为这里的潜力是显而易见的。
您必须考虑 FastTemplate 的一些问题。首先,有很多小文件必须管理,并且每次访问页面时都必须从磁盘读取。这可能会导致繁忙站点上的性能显着下降。在访问不频繁的站点上,这可能不是问题。在某些情况下,您可能希望为站点中的每个页面使用单个模板,以减少模板文件的数量。
Benjamin Kahn 正在托管一个名为 Cached FastTemplate 的 FastTemplate 扩展的网页 (http://zoned.net:81/~xkahn/php/fasttemplate/)。Cached FastTemplate 为 FastTemplate 添加了多项性能增强功能。使用此软件包,页面或页面的部分可以缓存在内存中,并且缓存规则是可配置的。一旦您熟悉 FastTemplate,就值得查看一下。
正如我在新工作中很快学到的那样,仅仅开发一个今天优秀的网站是不够的。它还必须是可扩展和可维护的。像 DreamWeaver 这样的 HTML 生成器虽然易于使用,但生成的 HTML 非常难看。您不想在这些文件中寻找您的 PHP 代码。像 FastTemplate 这样的 HTML 模板可以为 Web 开发人员的生活质量做出很大贡献。
