每个进行过较大型的php-web应用程序设计的开发人员大概都有如下的经历:花大量的时间写超文本语句,为页面排版,兼作美工等;或在整合的程序代码在和html静态页面时花费大量的时间。的确,用脚本语言开发Web应用不容易将数据的处理和数据的显示分开,但在多人合作的情况下,如果无法将数据和显示分开,将大大影响开发的效率,专业分工的发挥。为了解决这个问题,PHP也提供了自己的解决方案,有多种,本文主要介绍PHPLIB中的Template类。

1 模板处理类的设计

模板处理类主要需完成以下的任务:

・从模板文件中读取显示用的HTML代码。

・将模板文件和实际生成的数据结合,生成输出的结果。

http://www.gaodaima.com/45872.htmlPHP-Web应用程序开发:使用模板_php

・允许同时处理多个模板。

・允许模板的嵌套。

・允许对模板中的某个单独的部分进行处理。

归纳上述任务,模板类的设计目标为:从多个模板文件中读入显示的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}

{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<=3; $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程序爱好者一起参与进来,多提宝贵意见,祝好运!

欢迎大家阅读《PHP-Web应用程序开发:使用模板_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

php使用模版开发的实例,PHP-Web应用程序开发:使用模板_php相关推荐

  1. 第一章 Web应用程序开发基础

    一.HTTP协议工作机制 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它是一种主流B/S架构中应用的通信 ...

  2. ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试

    想必大家之前在进行ASP.NET Web 应用程序开发期间都有用到过将我们的网站部署到IIS自定义主机域名并附加到进程进行调试. 那我们的ASP.NET Core Web 应用程序又是如何部署到我们的 ...

  3. [HTML5]移动Web应用程序开发 HTML5篇 (四) 多媒体API

    介绍 本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具:HTML5,JavaScript, CSS3. 本篇是HTML5介绍的第三篇,主要介绍HTML5的Canvas API. ...

  4. [渝粤教育] 商丘职业技术学院 Java Web应用程序开发 参考 资料

    教育 -Java Web应用程序开发-章节资料考试资料-商丘职业技术学院[] 简述B/S结构和C/S结构,各自的优缺点? web前端基础 第1单元 网上书店系统开发准备 1.[单选题]主流的动态网页技 ...

  5. WEB应用程序开发与部署

    WEB应用程序开发与部署 来自:http://www.atguigu.com/

  6. 【JavaScript UI库和框架】上海道宁与Webix为您提供用于跨平台Web应用程序开发的JS框架及UI小部件

    Webix是Javascript库 一种软件产品 用于加速Web开发的 JavaScript UI库和框架 Webix用于跨平台Web应用程序开发的JS框架,为您提供102个UI小部件和功能丰富的CS ...

  7. python的web应用程序开发(Django框架)

    python的web应用程序开发(Django框架) 1.安装Django并开启网页服务器 pip install django # 安装Django包 django-admin startproje ...

  8. 云开发初探 —— 更简便的小程序开发模式

    李成熙,腾讯云高级工程师.2014年度毕业加入腾讯AlloyTeam,先后负责过QQ群.花样直播.腾讯文档等项目.2018年加入腾讯云云开发团队.专注于性能优化.工程化和小程序服务.微博 | 知乎 | ...

  9. 云开发初探 —— 更简便的小程序开发模式 1

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由李成熙heyli发表于云+社区专栏 李成熙,腾讯云高级工程师.2014年度毕业加入腾讯AlloyTeam,先后负责过QQ群.花样直播. ...

  10. android开发工具哪个好_小程序开发工具怎么用?哪个好用?

    想要开发微信小程序,在没有太多资金找外包团队定制.自建团队开发时,就需要你自己通过小程序开发工具来生成小程序了.现在各种开发工具很多,到底小程序开发工具有哪些?这些微信小程序开发工具哪个好用?根据我的 ...

最新文章

  1. java使用HttpClient传输json格式的参数
  2. 什么是动态DNS 动态DNS有什么用
  3. mxnet基础到提高(10)--读写文件
  4. 不用卷积也能生成清晰图像,用两个Transformer构建一个GAN
  5. 麦克风设计指导与选型参考
  6. swarm:pending_WildFly Swarm:使用Java EE构建微服务
  7. I/O的一些简单操作
  8. 2018-09-14
  9. opencv2.4.7.2画圆,画十字,画矩形
  10. Linux下bzero函数
  11. 子龙山人:我从Cocos2d-x团队里学到的
  12. 为什么很多成功的企业家都有工程师背景?
  13. 信息发布类网站后台界面设计一点思考(整体布局)
  14. 基于麻雀搜索算法的同步优化特征选择 - 附代码
  15. 脂肪率——最忠实的胖瘦指标
  16. Python报错:ImportError cannot import name ‘imresize‘
  17. Neo4j REST API使用实例---ttlsa教程系列之neo4j(二)
  18. 拜读《高质量C/C++编程》笔记
  19. html动画图片重叠,CSS3炫酷堆叠图片展示动画特效
  20. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引

热门文章

  1. Django最佳实践:项目布局
  2. VC与Matlab混合编程的快速实现(3-1)
  3. 那两个告扎克伯格抄袭的斜杠青年,后来怎么样了?
  4. 想用Python爬小姐姐图片?那你得先搞定分布式进程
  5. 成为大数据顶尖程序员,先过了这些Hadoop面试题!(附答案解析)
  6. 教育部认定,“新工科”最有“钱途”
  7. STM32之窗口看门狗原理
  8. STM32之独立看门狗例程
  9. 推荐一款多功能时间管理神器
  10. 漫话:如何给女朋友解释什么是3PC?