使用 PHP 4.0 和 FastTemplate 1.1.0 进行 Web 开发

作者:Bill Cunningham

关于 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/]。

清单 1. index.php

清单 2. mysql.php

清单 3. goodbye.php

这个例子虽然简短而简单,但说明了 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)。

Web Development with PHP 4.0 and FastTemplate 1.1.0

图 1. PHP SQL 查询测试页面

Web Development with PHP 4.0 and FastTemplate 1.1.0

图 2. 来自测试查询的输出

现在,假设您扮演图形设计师的角色。您的工作是彻底改变整个应用程序的外观。您想象中的老板刚刚说灰色背景必须消失——他想要黄色。他希望所有内容都位于页面中心,而不是左对齐。顺便说一句,他希望所有文本都是绿色的。使用基于 FastTemplate 的站点,您可以在不到一分钟的时间内通过编辑顶级模板文件 main.tpl 来实现所有这些更改。

存在更好的 Web 编辑器,但 Netscape Composer 可以完成这项工作。以下是操作方法:在 Netscape Navigator 中,选择文件 --> 打开页面。在出现的对话框中,输入或浏览到示例目录中 main.tpl 的完整路径,然后单击“在 Composer 中打开”。Netscape Composer 将打开一个大窗口,其中在 composer 编辑区域中显示一个单词 {BODY}(参见图 3)。那是 main.tpl 的 HTML 渲染版本。要进行老板的更改,首先选择编辑 --> 全选。{BODY},包括括号,应以黄色突出显示。现在选择格式 --> 对齐 --> 居中。这样就完成了居中。再次选择编辑 --> 全选。现在选择格式 --> 文本颜色,并从色板选择器中选择一种漂亮的深绿色。单击“确定”。您现在应该看到 {BODY} 为深绿色。这是第二个,还剩一个。选择格式 --> 页面颜色和属性。在“颜色和背景”选项卡顶部的单选按钮组中选择“使用自定义颜色”按钮。然后选择“背景”。从出现的对话框中的“色板”选项卡中选择黄色。单击“确定”、“应用”和“再次确定”。您在 Composer 中的背景应该已经是黄色的。现在选择文件 --> 保存,然后选择文件 --> 关闭。

Web Development with PHP 4.0 and FastTemplate 1.1.0

图 3. 打开用于编辑的主 FastTemplate 文件

现在从示例中重新加载查询页面。所有三个更改现在都应该生效:黄色背景、绿色文本和所有内容居中,但应用程序仍应像以前一样以编程方式工作(参见图 4 和图 5)。虽然这个例子非常简单,但我认为这里的潜力是显而易见的。

Web Development with PHP 4.0 and FastTemplate 1.1.0

图 4. 新模板自动应用于查询测试页面

Web Development with PHP 4.0 and FastTemplate 1.1.0

图 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 开发人员的生活质量做出很大贡献。

Web Development with PHP 4.0 and FastTemplate 1.1.0
Bill Cunningham 最近从美国海军陆战队退役,在那里他担任 Solaris 系统管理员。他现在受雇于北卡罗来纳州夏洛特的 Heafner Tire Group,在一个基于 Linux/MySQL 的站点担任 Web 开发人员。
加载 Disqus 评论