发信人: bb_rain() 
整理人: tang(2001-01-31 09:00:16), 站内信件
 | 
 
 
<?
 
 /********************************************************************* *********
 
     Template Module for PHP3 & PHP4  ( v 1.00 )
 
     Copyright (C) 2000 heyin.com, All Rights Reserved.
                        http://www.heyin.com
                        Rain ( Email: [email protected]  Oicq: 1235686 )
 
     cl_template.php, 2000/8/26
 
 ********************************************************************** *********/
 
 
 include $PATH."class/cl_html.php";
 
 
 //  Template Class
 
 class Template {
   var $FLAG = array('FIELD','FUNC','ARRAY','GTEXT','GCHECK','GRADIO',' STEXT','SNUM','DOC_PATH','JS','AD','COPYRIGHT','');
       //  Template Flag
   var $Path;                                        //  Template Path
    var $FileName;                                    //  Template File  Name
   var $S;                                           //  Out Text
 
   function Template($Path,$FileName) {
     $this->Path = $Path;
     $this->FileName = $FileName;
   }
 
   //  Read Template File
   function Read() {
     $filename = $this->Path.$this->FileName;
     $this->S = implode("",file($filename));
   }
 
   //  Parse
   function Parse() {
     $this->Read();
 
     $this->ParseBlock();
     $this->S = $this->ParseAllFlag($this->S,'OUT');
   }
 
   //  Parse All Flag
   function ParseAllFlag($S,$Out) {
     $size = count($this->FLAG);
     for ($i=0;$i<$size;$i++) {
       $S = $this->ParseFlag($S,$i,$Out);
     }
     return $S;
   }
 
   //  Print Html
   function PrintHtml() {
     $this->Parse();
     print $this->S;
   }
 
   //  Parse Flag
   function ParseFlag($S,$Op,$Out) {
     global $DOC_PATH;
 
     $DOC_PATH = $this->Path;
 
     $handle = $this->FLAG[$Op];
 
     $REG = "/{\s*$handle\s*/s";
     $sub=preg_split($REG, $S);
 
     $size=count($sub);
     for ($i=1;$i<$size;$i++) {
       $temp=preg_split("/\s*}/", $sub[$i]);
       if (!empty($temp[0])) {
         $var = explode('|',$temp[0]);
 
         switch ($handle) {
           case "FIELD":
             $OutText = $GLOBALS[$Out][$var[0]];
             break;
           case "FUNC":
             eval("\$OutText = ".$var[0]."(".$var[1].");");
             break;
           case "ARRAY":
             $s = explode(',',$var[1]);
             $count = count($s);
             for($j=0;$j<$count;$j++) {
               $para.="[".$s[$j]."]";
             }
             eval("\$OutText = \$GLOBALS[".$var[0]."]".$para.";");
             break;
           case "GTEXT":
             $NEW = new GroupText($GLOBALS[$var[0]], $var[1]);
             $OutText = $NEW->OutText();
             break;
           case "GCHECK":
             $NEW = new GroupCheck($GLOBALS[$var[0]], $var[1], "ret".uc first($var[1]));
             $OutText = $NEW->OutText();
             break;
           case "GRADIO":
             $NEW = new GroupRadio($GLOBALS[$var[0]], $var[1], "ret".uc first($var[1]));
             $OutText = $NEW->OutText();
             break;
           case "STEXT":
             $s = explode(',',$var[1]);
             $NEW = new SelectText($GLOBALS[$var[0]], $var[1], "ret".uc first($s[0]));
             $NEW->Set('STYLE',$s[1]);
             $OutText = $NEW->OutText();
             break;
           case "SNUM":
             $s = explode(',',$var[1]);
             $NEW = new SelectNum($GLOBALS[$var[0]], $var[1], "ret".ucf irst($s[0]));
             $NEW->Set('STYLE',$s[1]);
             $OutText = $NEW->OutText();
             break;
           case "DOC_PATH":
           case "JS":
           case "AD":
           case "COPYRIGHT":
           case "":
             $OutText = $GLOBALS[$var[0]];
             break;
         }
         $REG = "/{\s*".$handle."\s+".$var[0]."[^}]*}/s";
         $S=preg_replace($REG, $OutText, $S);
       }
     }
     return $S;
   }
 
   //  Parse Block
   function ParseBlock() {
     global $ROW;
 
     $REG = "/<!--\s*BEGIN\s*/s";
     $sub=preg_split($REG, $this->S);
     $size=count($sub);
     for ($i=1;$i<$size;$i++) {
       $temp=preg_split("/\s*-->/", $sub[$i]);
       $handle = $temp[0];
       if (!empty($temp[1])) {
         $var=preg_split("/<!--\s*END\s*$handle/", $temp[1]);
         $S = $var[0];
         $OutText = "";
         for ($j=0;$j<$GLOBALS['COUNT'];$j++) {
           $ROW = $GLOBALS['LINES'][$j];
           $OutText .= $this->ParseAllFlag($S,'ROW');
         }
         $REG = "/<!--\s*BEGIN\s*$handle\s*-->(.*)<!--\s*END\s*$handle\ s*-->/sm";
         $this->S = preg_replace($REG, $OutText, $this->S);
       }
     }
   }
 }
 
 ?>
 
   HTML 模版标记设置说明 ( 2000.8.26 )
 ---------------------------------------------------------------------- ------------------------------
 
 
    标记中的空格可为0个或多个,标记之间可以嵌套。
    变量内部亦可嵌套各种标记(包括块标记和特殊标记),注意灵活运用。
 
 
 一、普通标记:
 
 1. 变量标记
 
    说明:               简单输出变量
    标记:               { 输出变量名 }
    示例:               { name }
                         
 2. 字段标记
 
    说明:               简单输出字段值
    标记:               { FIELD 输出字段名 }
    示例:               { FIELD name }
 
 3. 函数标记
 
    其中可以内嵌字段标记
 
    说明:               经过函数处理,输出变量或字段值,( 函数必须已定 义 )
    标记:               { FUNC 函数名|变量(字段)参数1,变量(字段)参数2, ... }
    示例:               { FUNC date|'Y-m-d',name }
                         { FUNC date|'Y-m-d',{ FIELD name } }
 
 4. 数组标记
 
    其中可以内嵌字段标记
 
    说明:               输出指定数组中的某一元素 ( 数组必须已定义,必须 是全局数组 )
    标记:               { ARRAY 数组名|变量(字段)参数1,... }
    示例:               { ARRAY LEVEL|level }
                         { ARRAY LEVEL|{ FIELD level } }
 
 
 
 二、组标记:
 
   其中可以内嵌普通标记
 
 1. 文本组标记
 
    说明:               输出文本组
    标记:               { GTEXT 输出数组名|当前变量(字段)名 }
    示例:               { GTEXT MUSIC|music }
                         { GTEXT MUSIC|{ FIELD music } }
 
 2. 检查框组标记
 
    说明:               输出检查框组
    标记:               { GCHECK 输出数组名|当前变量(字段)名 }
    示例:               { GCHECK MUSIC|music }
                         { GCHECK MUSIC|{ FIELD music } }
 
 3. 单选钮组标记
 
    说明:               输出单选钮组
    标记:               { GRADIO 输出数组名|当前变量(字段)名 }
    示例:               { GRADIO MUSIC|music }
                         { GRADIO MUSIC|{ FIELD music } }
                         
 4. 文本选择框组标记
 
    说明:               输出文本选择框组
    标记:               { STEXT 输出数组名|当前变量(字段)名 }
    示例:               { STEXT EDU|edu }
                         { STEXT EDU|{ FIELD edu } }
                         
 5. 数字选择框组标记
 
    说明:               输出检查框组
    标记:               { SNUM 输出数组名|当前变量(字段)名 }
    示例:               { SNUM HEIGHT|height }
                         { SNUM HEIGHT|{ FIELD height } }
                         
 
 
 三、块标记:
 
   其中可以内嵌任意标记
 
 1. 块标记
 
    说明:               输出块的内容
    开始标记:           <!-- BEGIN handle -->
    结束标记:           <!-- END handle -->
 
 2. 管理块标记
 
    说明:               按不同的管理权限输出块的内容
    开始标记:           <!-- MBEGIN handle -->
    结束标记:           <!-- MEND handle -->
 
 
 
 三、特殊标记:
 
   其中可以内嵌任意标记
 
 1. 文档路径标记
 
    说明:               文档路径
    标记:               { DOC_PATH }
 
 2. 程序路径标记
 
    说明:               程序路径
    标记:               { PRG_PATH }
 
 3. 分页标记
 
    说明:               分页
    标记:               { PAGE handle }
 
 4. JS 标记
 
    说明:               JS 函数
    标记:               { JS handle }
 
 5. 广告标记
 
    说明:               输出广告的内容
    标记:               { AD handle }
 
 6. 版权标记
 
    说明:               版权信息
    标记:               { COPYRIGHT handle }
 
 
 欢迎大家试用,有好的意见或建议请告诉小雨。
 您可以任意修改,但请保留版权信息,谢谢!
 Email: [email protected]
  -- HEYIN 软件 http://www.heyin.com  
 虚拟社区,聊天室,交友程序,网上超市,电子商务 ...
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.133.178.72]
  | 
 
 
 |