用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的ASP防火墙
Oct 09 PHP
PHP 文件上传进度条的两种实现方法的代码
Nov 25 PHP
加强版phplib的DB类
Mar 31 PHP
php算开始时间到过期时间的相隔的天数
Jan 12 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
Jun 26 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
php魔术函数__call()用法实例分析
Feb 13 PHP
php实现统计网站在线人数的方法
May 12 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
Jun 23 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 PHP
php字符串函数 str类常见用法示例
May 15 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实现递归抓取网页类实例
2015/04/03 PHP
php中file_exists函数使用详解
2015/05/08 PHP
php数组随机排序实现方法
2015/06/13 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
javascript函数库-集合框架
2007/04/27 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
跨浏览器的事件对象介绍
2012/06/27 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
python K近邻算法的kd树实现
2018/09/06 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
浅析matlab中imadjust函数
2020/02/27 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
开学典礼主持词
2014/03/19 职场文书
企业环保标语
2014/06/10 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
运动会开幕词
2015/01/28 职场文书
化妆品促销活动总结
2015/05/07 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
七年级生物教学反思
2016/02/20 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android