首 页   · 站长博客 · 用户注册 · 会员登陆  · 会员排行  ·最新主题  ·最近回复  精华区  版权声明  ·论坛管理
  当前登录身份:游客,请先登录。  笔名: 口令: 验证码:   
楼 主  index »  PHP原创源码发布区 » 本站原创的一个最简易的模板引擎(支持生成HTML缓存)  


  作者:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

  nqp@nqp.me
  4304410
  www.nqp.me

 

 发表:2008-04-15 14:12:14 阅读 4064 次 回复 5 次 得分4  |   字号 字色
本站原创的一个最简易的模板引擎(支持生成HTML缓存)
这是本站站长以前写一个的最简易的模板引擎(实现代码分离和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();   //输出


以上只是一个最简单的额例子。~~~~~
 
 1#楼  
 
  回复人:小菜蛋
  注册时间:2008-01-03
  主题/回复:5/35
  积分:721
  等级:★★★(六级)
  称号:声名鹊起

   
 1#楼 发表于2008-04-19 13:00:05  评分:1 

回复给楼主(一起PHP)
好东西!
抢个沙发做先~
 2#楼  
 
  回复人:kiril
  注册时间:2008-06-13
  主题/回复:12/38
  积分:113
  等级:★☆(三级)
  称号:牛刀小试

用户联系方式已设置为保密
 2#楼 发表于2008-06-13 16:59:03  评分:1 

回复给楼主(一起PHP)
强烈支持中。。。。
 3#楼  
 
  回复人:kiril
  注册时间:2008-06-13
  主题/回复:12/38
  积分:113
  等级:★☆(三级)
  称号:牛刀小试

用户联系方式已设置为保密
 3#楼 发表于2008-06-13 16:59:25  评分: 

回复给楼主(一起PHP)
太棒了 学习中
 4#楼  
 
  回复人:lc0633
  注册时间:2007-08-08
  主题/回复:1/8
  积分:427
  等级:★★☆(五级)
  称号:略有小成

   
 4#楼 发表于2008-10-27 10:25:36  评分:1 

回复给楼主(一起PHP)
保存,学习
 5#楼  
 
  回复人:okjxdn
  注册时间:2010-01-21
  主题/回复:2/16
  积分:84
  等级:★(二级)
  称号:初出茅庐

   
 5#楼 发表于2010-01-26 13:01:43  评分:1 

回复给楼主(一起PHP)
  看不懂    继续努力,加油以后能看懂就小成了吧
  页数1/1首页 « 1 » 末页
  发表回复:您还没有登陆,无法发表回复。请先[登陆]

一起PHP技术联盟 主办:一起PHP 联系方式:站长QQ:4304410 QQ群:8423742 20159565 站长博客 E-mail: nqp@nqp.me 执行时间:0.017sec
SimsmaBBS 2008 (v6.0) Developed by 17php.com,Copyright(C)2003-2010 All rights reserved. 副本授权:一起PHP官方专用版