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


Posted in PHP onOctober 09, 2006

静态网站的模板框架

首先,我们象前面一样为所有的页面公用元素以及页面整体布局编写模板文件;然后从所有的页面删除公共部分,只留下页面内容;接下来再在每个页面中加上三行PHP代码,如下所示:

<?php

<!-- home.php -->
<?php require('prepend.php'); ?>
<?php pageStart('Home'); ?>

<h1>你好</h1>
<p>欢迎访问</p>
<img src="demo.jpg">
<p>希望你能够喜欢本网站</p>

<?php pageFinish(); ?>

?>

这种方法基本上解决了前面提到的各种问题。现在文件里只有三行PHP代码,而且没有任何一行代码直接涉及到模板,因此要改动这些代码的可能性极小。此外,由于HTML内容位于PHP标记之外,所以也不存在特殊字符的处理问题。我们可以很容易地将这三行PHP代码加入到所有静态HTML页面中。

require函数引入了一个PHP文件,这个文件包含了所有必需的与模板相关的PHP代码。其中pageStart函数设置模板对象以及页面标题,pageFinish函数解析模板然后生成结果发送给浏览器。

这是如何实现的呢?为什么在调用pageFinish函数之前文件中的HTML不会发送给浏览器?答案就在于PHP 4的一个新功能,这个功能允许把输出到浏览器的内容截获到缓冲区之中。让我们来看看prepend.php的具体代码:

<?php

require('class.FastTemplate.php');

function pageStart($title = '') {
GLOBAL $tpl;
$tpl = new FastTemplate('.');
$tpl->define( array( 'main' => 'main.htm',
'header' => 'header.htm',
'leftnav'=> 'leftnav.htm' ) );
$tpl->assign('TITLE', $title);
ob_start();
}

function pageFinish() {
GLOBAL $tpl;
$content = ob_get_contents();
ob_end_clean();
$tpl->assign('CONTENT', $content);
$tpl->parse('HEADER', 'header');
$tpl->parse('LEFTNAV', 'leftnav');
$tpl->parse('MAIN', 'main');
$tpl->FastPrint('MAIN');
}

?>

PHP 相关文章推荐
PHP编程中字符串处理的5个技巧小结
Nov 13 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
PHP传参之传值与传址的区别
Apr 24 PHP
PHP.vs.JAVA
Apr 29 PHP
php上传图片类及用法示例
May 11 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 PHP
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
Apr 01 PHP
用PHP制作静态网站的模板框架(三)
Oct 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
You might like
php curl 伪造IP来源的实例代码
2012/11/01 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
webpack4.0+vue2.0利用批处理生成前端单页或多页应用的方法
2019/06/28 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
[44:41]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
python简单实例训练(21~30)
2017/11/15 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
自我鉴定标准格式
2014/03/19 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
爱之链教学反思
2014/04/30 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
同学聚会邀请函
2015/01/30 职场文书
食品药品安全责任书
2015/05/11 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis