`
iwebcode
  • 浏览: 2012615 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

深入解析php模板技术原理【一】 详细出处参考:http://www.jb51.net/article/13368.htm

 
阅读更多
1、模板的由来
在没有模板技术之前,使用PHP开发程序,通常都是php代码和html混编在一起。比如说新闻列表,很可能就是一个newslist.php页面,结构如下:


<?
//从数据库中读取出要显示的新闻记录
?>
<html>
<head>……..
</head>
<body>
<?
While ($news = mysql_fetch_array($result)) {
?>
<!--输出新闻标题 -- >
<?
}
?>
</body>
</html>


那么这样有什么问题呢?首先,不利于分工合作。一般来说,都会由程序员来写代码,美工人员设计页面。那么在这种方式中,程序员必须等待美工人员把界面设计好才能开始工作。也就是说程序员和美工的工作是不能同步的。其次、不利于维护,可维护性差。比如说程序固定后,要修改界面,那么必须由美工修改后,程序员再重新添加。最后,程序结构混乱,可读性差。HTML和PHP混编在一起,一旦程序一多,就会变的非常的凌乱。


理解模板原理——使用PHP标签的模板技术
模板技术正是为了解决这些问题而出现的,为了解决这些问题,最早出现的是使用php标签的模板技术。
首先,我们要明白模板的目的是什么。模板主要要实现几个任务呢?第一、美工和程序的分离。更确切的说法是获取数据和显示数据的分离。第二、分工。良好的分工合作。
比如说新闻列表,如果使用模板,我们就可以把新闻列表的操作分成两部分:
1、 getnews.php 负责从数据库中读取数据到数组$news中,不关心$news是如何显示的。
2、 Shownews.php 负责把$news数组输出成HTML页面。而它不需要理会$news是从哪里来的。
好,这样,我们就实现了美工和程序的分离,达到了我们的初步目的,但是如何把这两个页面联合起来,并实现listnews.php的功能呢?
这就需要另外一个页面listnews.php,来负责把“美工(显示数据)”和“程序员(获取数据)”连接起来。应该说这个页面就是很简单了。
假设getnews.php的代码如下:
<?
$news =“新闻列表”;//实际中应该是从数据库中读取出来的。
?>


Shownesw.php的代码如下:
<html>
<head>
<title>显示新闻</title>
</head>
<body>
<?=$news?>
</body>
</html>


那么,这个联合页面listnews.php的代码就很简单了
<?
Include(‘getnews.php');//获取数据
Include(‘shownesw.php');//显示数据
?>


总结
使用PHP标签的模板系统,能够很好的实现美工和程序的分离,同时方便程序员和美工人员的分工合作,比如在上面的例子中shownews.php由美工人员来维护,getnews.php由程序人员来维护。而listnews.php就可以由系统设计人员来维护了。当然这中间需要增加一些约定的文档。
事实上,这个简单的例子也说明了最基本的MVC模型。其中M,模型,也就是负责读取数据,相当于我们的getnews.php。V,就是试图,用来显示数据,也就对应了shownews.php。最后是控制器C,对应我们的listnews.php


学习解释性模板技术——PHPLIB
Phplib的模板系统以小巧灵活、方便简单的特点赢得了很多phper的喜欢,在模板技术中占有一定的地位,它和fasttemplate之类的模板引擎都属于解释性模板技术。
在具体讲解phplib的使用之前,先说明为什么使用php标签的模板系统要继续改进。其实,这主要还是因为PHP标签对美工人员来说不方便。他们更加喜欢直接使用这种可视化的标签,比如{title}。
首先,我们自己把之前我们那个例子修改成使用可视化的标签来处理。第一步,把shownews.php改成shownews.tpl,里面的php标签换成可视化的标签,shownews.tpl的代码如下:
<html>
<head>
<title>显示新闻</title>
</head>
<body>
{title}
</body>
</html>
第二步,如何实现listnews.php的效果呢?其实很简单,我只要直接把{title}替换成不就可以了吗?所以,修改后的listnews.php的代码如下:
<?
Include('getnews.php');//获取数据
echo str_replace('{title}',$news,file_get_contents('shownews.tpl'))
?>


其实phplib的原理正是这样!比如说我们要使用phplib来实现上面功能,我们只需要修改listnews.php.修改后代码如下:
<?
Include('getnews.php');//获取数据
include('template.class.php');
$t=new Template();
$t->set_file(‘shownesw,'shownews.tpl');
$t->set_var('news',$news);
$t->parse('out', ‘shownesw');
$t->p('out');
?>
另外关于phplib的区域,大家可以去查阅相应的手册。




详细出处参考:http://www.jb51.net/article/13368.htm
分享到:
评论

相关推荐

    链接:https://pan.baidu.com/s/1uDgTJnJca8p79-vCnzXHFA 提取码:bnpq

    24考研大纲即将发布 链接:https://pan.baidu.com/s/1uDgTJnJca8p79_vCnzXHFA 提取码:bnpq

    charlesproxy(jb51.net).rar

    charlesproxy(jb51.net).rar 压缩包包含 charles-proxy-4.2.7-win64.msi python3 环境搭建必备

    Docker制作Python运行环境基础镜像的方法步骤

    本地下载地址:64位:https://www.jb51.net/softs/416037.html  32位:https://www.jb51.net/softs/543679.html 1.2基础镜像Ubuntu16.04 DockerHub拉取 docker pull ubuntu:16.04 本地Ubuntu下载地址:...

    MyEclipse 破解文件+破解说明

    Myeclipse 10 激活详解过程,Myeclipse 10 激活详解过程.pdf

    JB/T 3752.1-1999 低压成套开关设备和控制设备产品型号编制方法 第1部分:低压成磁开关设备.pdf

    JB/T 3752.1-1999 低压成套开关设备和控制设备产品型号编制方法 第1部分:低压成磁开关设备pdf,JB/T 3752.1-1999 低压成套开关设备和控制设备产品型号编制方法 第1部分:低压成磁开关设备

    编程学习.html 我的第一个作品

    编程学习 1. Visual Studio Code - ...2. DCloud - HBuilder 快应 ...3. access软件网-access,acc http://www.accessoft.com/Index.asp ...原文链接:https://blog.csdn.net/qq_42838569/article/details/118628244

    mysql安装图解总结

    https://www.jb51.net/article/96898.htm mysql 5.6.21 安装与配置详细步骤 这篇文章主要介绍了mysql5.6.21安装与配置的详细步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 MySQL版本:5.6.21 下载地址...

    Json.NET中文文档完全解析

    Json.NET中文文档完全解析,简而言之,这是一个可以用于.NET的Json辅助工具类。它可以将对对象序列化为json字符串,Newtonsoft.Json.JsonConvert类是非微软提供的...详细出处参考:http://www.jb51.net/article/30957.htm

    JavaScript教程.rar

    JavaScript教程,帮你轻松学习。

    学生信息录入系统

    学生信息录入系统 ... ... ... 4、本软件运行环境.net ...解决方法:参考https://www.jb51.net/article/59308.htm或https://blog.csdn.net/sat472291519/article/details/41007681。 8、数据库为access数据库,密码12345678。

    myeclipse破解文件

    可以破解myeclipse MyEclipse 各版本下载: http://www.softown.cn/soft/myeclipse MyEclipse 各版本破解教程: http://www.jb51.net/softs/150887.html

    AG-Admin 2.0 项目源码

    https://git.oschina.net/geek_qi/AG-Config.git: Authentication is required but no CredentialsProvider has been registered 这个错误可以不用理,主要是配置文件在git上无访问权限。不会影响使用,403错误,...

    Python学习手册_第3版[www.jb51.net].part2.rar

    Python学习手册_第3版[www.jb51.net].part2.rar

    jenkins流水线任务pipeline使用JaCoCo

    流水线语法的片段生成器可以选择...一步步说明了jacoco单测覆盖率的过程,值得一看:https://www.jb51.net/article/162875.htm 2020-02-20现在对单元测试以及测试覆盖率还是一团浆糊,对jacoco原理和使用还不了解 目

    PHP文件锁同步实例

    PHP文件锁同步实例 请参考文档: ...和 http://www.jb51.net/article/24962.htm请参考文档: http://blog.csdn.net/u014175572/article/details/53381049 和 http://www.jb51.net/article/24962.htm

    Python库 | fxg2svg-0.2.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:fxg2svg-0.2.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    rapi脚本 dll

    (PDF 格式)Adobe Reader 9.0 Lite 简体中文精简绿色版(pdf阅读器无中文乱码) http://www.jb51.net/softs/8690.html (PDG 格式)超星阅读器:http://www.jb51.net/softs/12829.html (wdl 格式)华康阅读器:...

    php header 详细使用说明与使用心得第1/2页

    不管页面有多少header,它会执行最后一个,不过是有条件的,例如: header(‘Location:https://www.jb51.net’); header(‘Location:http://www.g.cn’); header(‘Location:http://www.baidu.com’); 这个就会跳到...

    检查url链接是否已经有参数的php代码 添加 ? 或

    比如分页,因为有些链接已经有参数了,在附加分页信息的...则直接在链接后面添加一个 & 然后跟上分页信息: https://www.jb51.net/index.php?id=id&page=12 如果链接中没有参数,如: http://www.test.com/index.php 则

    求PHP数组最大值,最小值的代码

    php $fruits = array(“155::[removed]:https://www.jb51.net/list/list_114_1.htm”, “1::[removed]:https://www.jb51.net/list/list_3_1.htm”, “2::正则表达式::https://www.jb51.net/list/list_6_1.htm”, “3...

Global site tag (gtag.js) - Google Analytics