用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 相关文章推荐
在PWS上安装PHP4.0正式版
Oct 09 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
PHP字符串中特殊符号的过滤方法介绍
Feb 18 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
PHP获取数组长度或某个值出现次数的方法
Feb 11 PHP
php数据访问之查询关键字
May 09 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 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 extract 将数组拆分成多个变量的函数
2010/06/30 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
2019/10/08 PHP
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
python转换摩斯密码示例
2014/02/16 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
分享一个简单的python读写文件脚本
2017/11/25 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
python中logging包的使用总结
2018/02/28 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
Python列表元素常见操作简单示例
2019/10/25 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
大学生写自荐信的技巧
2014/01/08 职场文书
大学新生欢迎词
2014/01/10 职场文书
公司副总经理任命书
2014/06/05 职场文书
物理教育专业求职信
2014/06/25 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python