发信人: 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]
|
|