用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中的日期及时间
Nov 23 PHP
PHP 类型转换函数intval
Jun 20 PHP
PHP读取XML值的代码(推荐)
Jan 01 PHP
PHP中数组的三种排序方法分享
May 07 PHP
php笔记之:AOP的应用
Apr 24 PHP
ThinkPHP文件上传实例教程
Aug 22 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
php封装json通信接口详解及实例
Mar 07 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
PHP7 错误处理机制修改
Mar 09 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学习之整理字符串
2011/04/17 PHP
关于php循环跳出的问题
2013/07/01 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
js 提交和设置表单的值
2008/12/19 Javascript
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
django缓存配置的几种方法详解
2018/07/16 Python
python实现定时发送qq消息
2019/01/18 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android