用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树的代码,可以嵌套任意层
Oct 09 PHP
php利用header函数实现文件下载时直接提示保存
Nov 12 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
May 15 PHP
如何在PHP中使用正则表达式进行查找替换
Jun 13 PHP
ThinkPHP模版中导入CSS和JS文件的方法
Nov 29 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
PHP自毁程序(慎用)
Jul 09 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
php使用ftp实现文件上传与下载功能
Jul 21 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 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 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
js网页实时倒计时精确到秒级
2014/02/10 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
用队列模拟jquery的动画算法实例
2015/01/20 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
js获取ip和地区
2017/03/10 Javascript
Vue cli 引入第三方JS和CSS的常用方法分享
2018/01/20 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
学习python (2)
2006/10/31 Python
Python3基础之list列表实例解析
2014/08/13 Python
Python实现简单登录验证
2016/04/13 Python
基于Python os模块常用命令介绍
2017/11/03 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
python中setuptools的作用是什么
2020/06/19 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
职业生涯规划书结束语
2014/04/15 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
酒店前台辞职书
2015/02/26 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL