web|程序|模板
每个进行过较大型的PHP-Web应用程序设计的开发人员大概都有如下的经历:花大量的时间写超文本语句,为页面排版,兼作美工等;或在整合的程序代码在和HTML静态页面时花费大量的时间。的确,用脚本语言开发Web应用不容易将数据的处理和数据的显示分开,但在多人合作的情况下,如果无法将数据和显示分开,将大大影响开发的效率,专业分工的发挥。为了解决这个问题,PHP也提供了自己的解决方案,有多种,本文主要介绍PHPLIB中的Template类。
1 模板处理类的设计
模板处理类主要需完成以下的任务:
·从模板文件中读取显示用的HTML代码。
·将模板文件和实际生成的数据结合,生成输出的结果。
·允许同时处理多个模板。
·允许模板的嵌套。
·允许对模板中的某个单独的部分进行处理。
归纳上述任务,模板类的设计目标为:从多个模板文件中读入显示的HTML代码,将这些显示代码中需要动态数据的地方替换为PHP程序运算所得出的数据,然后按照一定的顺序输出。其中,替换的部分可以自由的设定。
读取显示用的HTML代码采用读文件的方式
模板文件和数据的结合采用正则替换
处理多个模板用数组存储来实现。
模板的嵌套的实现主要的想法是:将模板和输出(任何中间的分析结果)一视同仁,都可拿来做替换,即可实现。
单独部分的处理的通过在模板文件中设定标注,然后在正则替换中结合标注来控制,实现部分替换。
2 模板处理类的实现
请参看PHPLib中的Template.inc,总共345行代码,有详细的注释。以下列举一些主要的函数,供研读参考:
1) function set_file($handle,$filename=” ”) line 77, 读取文件
2) function set_var($varname, $value = "") line 119, 设置映射数据-替换变量
3) function set_block($parent, $handle, $name = "") line 96, 设置标注
4) function subst($handle) line 136, 执行数据替换
5) function parse($target, $handle, $append = false) line 165, 执行模板文件与数据的结合
6) function p($varname) line 268, 输出处理结果
注:本人下载的php-lib7.2c的Template.inc文件中的第95行少了个“/”,加上后使用正常。
3 模板处理类的使用
3.1 最基本的例子
为了简单起见,这里假设模板文件、使用模板的PHP文件和模板处理类的文件都放在同一个目录下。PHPLIB中的习惯是使用ihtml后缀为模板文件的后缀。
下面是要使用的模板文件:
这是一个使用模板的测试文件!
当前的时间是{currenttime}!
注:模板文件和通常的HTML文件差不多,唯一不同的是使用“{}”括起来的是可以被模板处理类替换的动态内容的变量。
接下来使用模板处理类来处理上面的模板:
//引入Template类
include("template.inc");
//得到需要替换的数据
$timeNow=date("Y-m-d H:i:s",time());
//实例化一个Template类
$template= new Template();
//载入test.ihtml模板
$template->set_file("handle1","test.ihtml");
//使用$timeNow的值替换模板中的currenttime
$template->set_var("currenttime",$timeNow);
//进行实际的模板操作
$template->parse("output","handle1");
//输出最后结果
$template->p("output");
?>
注:如果只想用PHPLIB中的模板类,只需在文件头包含Template.inc类即可。
创建Template对象时,可以指定模板文件路径,如:new Template(“/htdocs/apps/templates/”),缺省为当前路径。
3.2 模板嵌套与块设定
下面这个例子来自与PHPLIB的参考手册,综合性较强,这里需说明的一点是设定块的目的与嵌套无关,但这个范例包含了两者。请仔细阅读,块设定是为了避免这种情况:原本可在一个模板文件(静态页面)里完成的内容,因需要部分循环,而将部分循环内容提取单独做成模板文件。请思考,如果不用块设定,这个例子是不是需要3个模板文件呢?
模板文件1,page.ihtml
{PAGETITLE} |
|
{OUT} | Content |
模板文件2,box.ihtml
{TITLE} | |
{NUM} | {BIGNUM} |
模板处理文件,test.php
//引入Template类
include("template.inc");
#实例化一个Template类,名字叫$t
$t = new Template();
# 建立包含模板文件的数组
$t->set_file(array(
"page" => "page.ihtml",
"box" => "box.ihtml"));
# 载入模板文件box中的一个块row,引用名称为rows
$t->set_block("box", "row", "rows");
# 设置替换
$t->set_var(array("TITLE" => "Testpage",
"PAGETITLE" => "hugo"));
# 生成数据NUM,BIGNUM
for ($i=1; $i$n = $i;
$nn = $i*10;
#设置替换
$t->set_var(array("NUM" => $n, "BIGNUM" => $nn));
#进行分析,分析的结果添加到rows的后面
$t->parse("rows", "row", true);
}
# 生成box,再生成page
$t->parse("OUT", array("box", "page"));
# 输出最后结果
$t->p("OUT");
?>
注:这里page.ihtml模板文件中变量的命名与最后的输出句柄都用了“OUT”。
循环取值部分采用数据库类,即可将数据的生成与数据库应用结合起来。
执行结果如下图:
模板嵌套与块设定执行结果图
4 小结
本文主要简要介绍了PHPLIB中Template类的设计、实现及使用方法。当然,还有许多其他的PHP模板方案,如由Perl中演化而来的FastTemplates。目前Internet小组采用的是另一种方案,主要的实现方式是模板文件入库,采用eval来实现数据与模板文件的结合等,相对来说模板文件的管理与模板处理的使用比较简洁,但缺少文件存放的模式。本人目前在做的一些尝试是将两者结合起来,并想在PHPLIB的Template类的基础上进行改进。初步的目标任务有两个:1、在读取模板文件时扩展其对数据库的支持,这样可以在必要时增强灵活性与使用数据库管理工具 2、化简模板文件与数据的结合,因为在实际使用中大多数情况下无需将模板文件中的变量在处理程序中再设置(数据变量映射)一遍。
在此也希望读者、PHP程序爱好者一起参与进来,多提宝贵意见,祝好运!

许多用户在选择智能手表的时候都会选择的华为的品牌,其中华为GT3pro和GT4都是非常热门的选择,不少用户都很好奇华为GT3pro和GT4有什么区别,下面就就给大家介绍一下二者。华为GT3pro和GT4有什么区别一、外观GT4:46mm和41mm,材质是玻璃表镜+不锈钢机身+高分纤维后壳。GT3pro:46.6mm和42.9mm,材质是蓝宝石玻璃表镜+钛金属机身/陶瓷机身+陶瓷后壳二、健康GT4:采用最新的华为Truseen5.5+算法,结果会更加的精准。GT3pro:多了ECG心电图和血管及安

为什么截图工具在Windows11上不起作用了解问题的根本原因有助于找到正确的解决方案。以下是截图工具可能无法正常工作的主要原因:对焦助手已打开:这可以防止截图工具打开。应用程序损坏:如果截图工具在启动时崩溃,则可能已损坏。过时的图形驱动程序:不兼容的驱动程序可能会干扰截图工具。来自其他应用程序的干扰:其他正在运行的应用程序可能与截图工具冲突。证书已过期:升级过程中的错误可能会导致此issu简单的解决方案这些适合大多数用户,不需要任何特殊的技术知识。1.更新窗口和Microsoft应用商店应用程

第1部分:初始故障排除步骤检查苹果的系统状态:在深入研究复杂的解决方案之前,让我们从基础知识开始。问题可能不在于您的设备;苹果的服务器可能会关闭。访问Apple的系统状态页面,查看AppStore是否正常工作。如果有问题,您所能做的就是等待Apple修复它。检查您的互联网连接:确保您拥有稳定的互联网连接,因为“无法连接到AppStore”问题有时可归因于连接不良。尝试在Wi-Fi和移动数据之间切换或重置网络设置(“常规”>“重置”>“重置网络设置”>设置)。更新您的iOS版本:

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code<form name="myform"

Golang和Template包:创建个性化的用户界面在现代的软件开发中,用户界面往往是用户与软件进行互动的最直接的途径。为了提供一个好用、美观的用户界面,开发者需要灵活的工具来创建和定制用户界面。而在Golang中,开发者可以使用Template包来实现这一目标。本文将介绍Golang和Template包的基本用法,并通过代码示例展示如何创建个性化的用户界

Go语言是一种越来越受欢迎的编程语言,它的语法简洁,性能高效,易于开发。Go语言中提供了强大的模板引擎——"text/template",但是在使用时,有些人可能会遇到"undefined:template.Must"的错误,下面是解决该错误的方法。导入正确的包在使用"text/template"模板引擎时,需要导入"text/templat

通过Golang的Template包实现数据可视化随着大数据时代的到来,数据可视化成为了信息处理和分析的重要手段之一。数据可视化能够以简洁直观的方式展现数据,帮助人们更好地理解和分析数据。在Golang中,我们可以使用Template包来实现数据可视化功能。本文将介绍如何利用Golang的Template包实现数据可视化,并提供代码示例。Golang的Tem

watch4pro和gt各自具有不用的特点和适用场景,如果注重功能的全面性、高性能和时尚外观,同时愿意承担较高的价格,那么Watch 4 Pro可能更适合。如果对功能要求不高,更注重电池续航和价格的合理性,那么GT系列可能更适合。最终的选择应根据个人需求、预算和喜好来决定,建议在购买前仔细考虑自己的需求,并参考各种产品的评测和比较,以做出更明智的选择。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

Notepad++7.3.1
Easy-to-use and free code editor

Atom editor mac version download
The most popular open source editor

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.
