用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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 PHP
Php图像处理类代码分享
Jan 19 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
简单分析ucenter 会员同步登录通信原理
Aug 25 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
php eval函数一句话木马代码
May 21 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 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
递归列出所有文件和目录
2006/10/09 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
在Django框架中编写Contact表单的教程
2015/07/17 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
Python3 socket同步通信简单示例
2017/06/07 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
python 普通克里金(Kriging)法的实现
2019/12/19 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
python如何操作mysql
2020/08/17 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
Order by的几种用法
2013/06/16 面试题
高中毕业自我鉴定
2013/12/13 职场文书
大学新生入学教育方案
2014/05/16 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
企业法人代表证明书
2014/09/27 职场文书
团组织推荐意见
2015/06/05 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python