用PHP制作静态网站的模板框架(三)


Posted in PHP onOctober 09, 2006

避免页面元素重复

“这确实不错”,你也许会想,“我的网站主要就是由大量的静态页面构成。现在我可以从所有页面中删除它们的公共部分,要更新这些公共部分实在太麻烦了。以后我就可以用模板制作出很容易维护的统一页面布局。”但事情并非这么简单,“大量的静态页面”道出了问题的所在。

请考虑上面的例子。这个例子实际上只有一个example.php页面,它之所以能够生成整个网站的所有页面,是因为它利用了URL中的查询字符串从数据库之类的信息源动态地构造出页面。

我们之中的大多数人所运行的网站并不一定都有数据库支持。我们的网站大多数由静态页面构成,然后用PHP在这里、那里加上一些动态功能,比如搜索引擎、反馈表单等。那么,如何在这种网站上应用模板呢?

最简单的方法是为每一个页面复制一份PHP文件,然后在每一个页面中把PHP代码里代表内容的变量设置成合适的页面内容。例如,假设有三个页面,它们分别是主页(home)、关于(about)和产品(product),我们可以用三个文件分别生成它们。这三个文件的内容都类如:

<?php

// home.php
require('class.FastTemplate.php');
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav' => 'leftnav.htm' ) );

$content = "<p>欢迎访问</p>
<img src="demo.jpg">
<p>希望你能够喜欢本网站</p>";
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');

?>

显然,这种方法有三个问题:我们必须为每一个页面复制这些复杂的、牵涉到模板的PHP代码,这与重复公共页面元素一样使得页面难以维护;现在文件又混合了HTML和PHP代码;为内容变量赋值将变得非常困难,因为我们必须处理好大量的特殊字符。

解决这个问题的关键就在于分离PHP代码和HTML内容,虽然我们不能从文件中删除所有的HTML内容,但可以移出绝大多数PHP代码。

PHP 相关文章推荐
坏狼php学习 计数器实例代码
Jun 15 PHP
PHP中数组的三种排序方法分享
May 07 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
ThinkPHP5 的简单搭建和使用详解
Nov 15 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
Apr 02 PHP
PHP实现获取文件mime类型多种方法解析
May 28 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 PHP
用PHP制作静态网站的模板框架(二)
Oct 09 #PHP
用PHP制作静态网站的模板框架(一)
Oct 09 #PHP
php的header和asp中的redirect比较
Oct 09 #PHP
文件上传的实现
Oct 09 #PHP
简单易用的计数器(数据库)
Oct 09 #PHP
用Php实现链结人气统计
Oct 09 #PHP
也谈 PHP 和 MYSQL
Oct 09 #PHP
You might like
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
PHP读取Excel类文件
2017/05/15 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
Python实现简易Web爬虫详解
2018/01/03 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
python和php哪个更适合写爬虫
2020/06/22 Python
职业生涯规划设计步骤
2014/01/12 职场文书
房屋委托书范本
2014/04/04 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
2014年小学德育工作总结
2014/12/05 职场文书