精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● PHP>>荷音 PHP 库>>HEYIN PHP扩展库 (1)

主题:HEYIN PHP扩展库 (1)
发信人: 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]

[关闭][返回]