作者:iwind
原来在dev-club发表的一篇文章,将怎么用模板处理程序PHPlib 中的template.inc实现静态网页的生成,呵呵,居然被列入精华,并被多个网站转载,想来这是荣幸。其实网上这方面的东西很多了,我上此发布的所谓IAMS( iwind 文章管理系统),里面也有,有心人可以看一下。下面我只是简要在总结一次。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)现在一般说生成静态网页的方法有三种,一个是配置服务器,大家可以到http://www.devarticles.com/c/b/PHP/ 去找找看,对于这个很多地方都有的。另外一个是用ob_函数控制输出。方法如下:先用ob_start();打开输出缓冲器,然后是对数据的分析,操作等等,跟着用ob_get_contents();获取缓冲区的内容,然后再写入文件。根据这个步骤,可以写出以下程序:
<?php
ob_start();
//主体部分,数据操作,处理,输出等等。。。
require”global.php”;
mysql_connect(“localhost”,”root”,””);
…..
//获取缓冲区内容
$contents=ob_get_contents();
//如果不想输出任何东西,可以加上这句
ob_end_clean();
//写入目的文件
$fp=@fopen($targetFile,”w+”) or die(“打开文件时出错”);
fwrite($fp,$contents);
?
这样就把这个动态页面的内容写入了静态页面,$targetFile.像有的网站首页内容很多,要调用n多个查询语句时,不妨定时生成静态网页,既大幅提高了访问速度,也减轻了服务器负担。
你可以看出来,我用ob_只是处理单个页面,对于批量写入或更新多个页面,这个方法就不行了。这就是我要讲的第三种方法,用模板。模板是个好东东,现在大家都或多或少在用它,建议还不会简单模板处理的网友,花点时间去学它,一般的模板处理程序都很简单的。用模板实现静态网页的生成是非常简单的,方法就是获取分析结果,把分析结果写入文件。下面就以PHPlib中的template.inc来谈谈如果用模板生成静态网页。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)一, 修改template.inc
加入以下的几个函数:
//将分析结果保存到文件中去
function savetofile ($dir,$varname){
$data=$this-finish($this-get_var($varname));
$fp=fopen($dir,"w+");
fwrite($fp,$data);
}
//清除已赋值数组
function renew(){
$this-varkeys=array();
$this-varvals=array();
$this-file=array();
}
第一个函数是结果保存到静态文件中,第二个是把所有的模板分析变量都置为空,以免批量处理时相互影响。
二,实现静态网页生成。
<?php
$itpl-set_file(“main”,”mian.tpl”);
//分析模板变量
…..
//分析mainmains
$tpl-parse("mains","main");
//把分析结果mains存入main.html
$tpl-savetofile("main.html","mains");
//置空
$tpl-renew();//至关重要
?
呵呵,是不是很简单,main.html就是我们要的内容。下面是一个结合数据库的例子,并用函数封装了起来。
<?php
//$aid是数据库中的文章id,$table是表名称,$template是模板地址,$tpl是template.inc的一个实例
//每一个aid对应一个静态网页地址,都存在一个数据表中
//表的结构类似于 aid target title
// 1 a1.html ….
// 2 a2.html ….
// 3 a3.html ….
function staticInfo($aid){
global $table,$template,$tpl;
//查询数据库
$res=mysql_query(“select * from $table where aid=’$aid’”);
//取出数据
$array=mysql_fetch_array($res);
//读静态网页地址,标题。
$target=$array[“target”];
$title=$array[“title”];
//分析模板
$tpl-set_file(“main”,$template);
//把模板中的{title}变量换成$title
$itpl-set_var(“title”,$title”);
//分析整个模板
$itpl-set_var(“mains”,”main”);
//把mains写入文件
$tpl-savetofi