这是本站站长以前写一个的最简易的模板引擎(实现代码分离和HTML缓存)类库。
只是实现了最简单的原理,可以实际使用,也可以供感兴趣的朋友参考。
代码如下:
<?php
/* ----------Notice----------------------
This File is writen by NieQingpeng 2005.6
If any question please visit www.17php.com.
My email address rznqp@163.com.
Please keep this notice no changed when you
use this code in your website ,thank you.
------Wlecome to www.17php.com --------*/
class MST{
var $T_DIR;
var $T_FNAME;
var $T_FFNAME;
var $T_ENAME;
var $T_VARR;
function __construct($fname){
$this->T_DIR=$this->getINI("ini/MST_INI.php","DefDir");
$this->T_ENAME=$this->getINI("ini/MST_INI.php","DefFName");
$this->T_FFNAME=BaseName($_SERVER["PHP_SELF"]);
if(!is_null($fname)){
$this->T_FNAME=$fname;
}
}
function setDIR($dir){
$this->T_DIR="./".$dir."/";
}
function setFNAME($fname){
$this->T_FNAME=$fname;
}
function APPEND($name,$value){
$this->T_VARR[$name]=$value;
}
function getINI($fname,$s1){
$fp=fopen($fname,"r");
if(!$fp){
echo "打开文件失败".$fname;
exit;
}
fseek($fp,6);
while(!feof($fp)){
$temp=fgets($fp);
if(substr($temp,1,strlen($s1))==$s1){
$value=trim(substr($temp,strlen($s1)+2,strlen($temp)-strlen($s1)-2));
break;
}
}
fclose($fp);
return $value;
}
function DUMP(){
$fpath=$this->T_FNAME;
if(is_null($fpath)){
$fpath=$this->T_FFNAME.$this->T_ENAME;
}
$fpath = $this->T_DIR.$fpath;
if(!file_exists($fpath)){
echo "在指定位置找不到模版文件:<b>".$fpath;
exit;
}
$fp=fopen($fpath,"r");
$content=fread($fp,filesize($fpath));
while(eregi("\{\|([0-9a-z_-]+)\|}",$content,$b1)){
if(array_key_exists($b1[1],$this->T_VARR)){
$content = str_replace('{|'.$b1[1].'|}',$this->T_VARR[$b1[1]],$content);
}else{
$content = str_replace('{|'.$b1[1].'|}',fecho($b1[1]."未赋值!",null,"red"),$content);
}
}
fclose($fp);
return $content;
}
function MAKE_HTML_FILE($TplName,$HTMLFname){
$day=getdate();
$tpname=$TplName;
$fname=$HTMLFname;
if(is_null($HTMLFname)){
$n1=rand(0,9);
$n2=rand(0,9);
$fname=$day[0].$n1.$n2.".html";
}
if(is_null($TplName)){
$tpname=$this->T_FNAME.$this->T_ENAME;
}
$tpname=$this->T_DIR.$tpname;
$CACHE_DIR=$this->getINI('ini/MST_CACHE_INI.php','Cache_Dir');
$fdir=$CACHE_DIR.$day["year"].$day["mon"]."/";
if(!is_dir($fdir)){
mkdir($fdir);
}
$fp=fopen($tpname,"r");
$content=fread($fp,filesize($tpname));
while(eregi("\{\|([0-9a-z_-]+)\|}",$content,$b1)){
if(array_key_exists($b1[1],$this->T_VARR)){
$content = str_replace('{|'.$b1[1].'|}',$this->T_VARR[$b1[1]],$content);
}else{
$content = str_replace('{|'.$b1[1].'|}',fecho($b1[1]."未赋值!",null,"red"),$content);
}
}
fclose($fp);
$fp=fopen($fdir.$fname,'w');
fwrite($fp,$content);
fclose($fp);
return $fdir.$fname;
}
}
?>
类库的有关参数存放在 ini/MST_INI.php中。其内容如下:
代码如下:
<?php
exit;
?>
[MST_INI---THE BASE INFORMATION OF SST]
[version]1.5
[DefDir]./MST_DIR/
[DefFName].html
参数存放于此是为了避免每次创建MST对象都需要设置基本参数(如模板文件存放路径等)
生成静态页面的有关参数存放在ini/MST_CACHE_INI.php中,目前只有一个参数就是存放缓存文件的路径:
代码如下:
<?php
exit;
?>
[MST_CACHE_INI_FILE]
[Cache_Dir]HTML_CACHE/
将以上参数存放在一个外部文件中只是为了以后修改维护方便。如果要简化此类,可以直接这几个参数定义到 MST 类中,作为一个成员变量。或者定义到 CLASS MST{}之前作为全局变量等都可以。
使用起来十分简单: 模板文件 test.html
代码如下:
<html>
<body>
{|title|}
<br>
{|title2|}
</body>
<html>
PHP文件test.php:
代码如下:
$TEST=new MST("test.html"); //创建类
$TEST->APPEND("title","欢迎使用Magic Spider Templates"); //增加一个变量
$TEST->APPEND("title1","Magic Spider Templates测试页面"); //同上
$HTML_Dir=$TEST->MAKE_HTML_FILE("mst_info.html",null); //生成缓存
echo $TEST->DUMP(); //输出
以上只是一个最简单的额例子。~~~~~
|