用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+DBM的同学录程序(2)
Oct 09 PHP
PHP的变量总结 新手推荐
Apr 18 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 PHP
深入PHP数据缓存的使用说明
May 10 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
php记录代码执行时间(实现代码)
Jul 05 PHP
php 生成短网址原理及代码
Jan 23 PHP
php实现水仙花数示例分享
Apr 03 PHP
微信公众号开发之微信公共平台消息回复类实例
Nov 14 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
PHP中str_split()函数的用法讲解
Apr 11 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插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
Python 列表list使用介绍
2014/11/30 Python
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
python实现两个文件夹的同步
2019/08/29 Python
详解python中docx库的安装过程
2019/11/08 Python
python 画图 图例自由定义方式
2020/04/17 Python
python能否java成为主流语言吗
2020/06/22 Python
基于python实现操作redis及消息队列
2020/08/27 Python
详解python中的异常和文件读写
2021/01/03 Python
最新的咖啡店创业计划书
2013/12/30 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
小孩不笨观后感
2015/06/03 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python