<?
class myclass
{
var $temp_db;
var $files=array(); //模板文件名
var $file_ext=".htm"; //模板文件後輟
var $file_dir="template"; //模板文件目錄
var $unknown="remove"; //若沒有找到替換的變量的處理方法
//del 刪除變量 undo 保持不變 comment 替換為注釋
var $halt_on_error="yes"; //在發生錯誤時停止程序
var $error=""; //最後一個錯誤內容
var $vars=array(); //存放元素索引
var $vals=array(); //存放元素值
function myclass($dir="",$ext="")
{
if($dir)
$this->file_dir=$dir;
if($ext)
$this->file_ext=$ext;
}
//================連接數據庫
function con($host,$user,$psw)
{
if(!@mysql_connect($host,$user,$psw))
{
$this->showmes("<font color=\"#FF0000\"><ul><li>無法連接數據庫!</ul></li></font>");
exit();
}
}
//================選擇數據庫
function close()
{
return mysql_close();
}
//================選擇數據庫
function selectdb($dbname)
{
if(!@mysql_select_db($dbname))
{
$this->showmes("<font color=\"#FF0000\">無法連接數據庫!</font>");
exit();
}
}
//================連接選擇數據庫
function c_all($host,$user,$psw,$dbname)
{
$this->con($host,$user,$psw);
$this->selectdb($dbname);
mysql_query("SET NAMES UTF8");
}
//================執行SQL查詢
function query($query)
{
return mysql_query($query);
}
//================獲取查詢結果
function fetch_arr($query)
{
return mysql_fetch_array($query);
}
function fetch_row($query)
{
return mysql_fetch_row($query);
}
//================獲取結果數目
function num_rows($query)
{
return mysql_num_rows($query);
}
//================獲取結果數目
function errno()
{
return mysql_errno();
}
//================輸出錯誤
function wrong($mes)
{
$this->error=$mes;
echo "<font color=\"#FF0000\">".$mes."</font>";
if($this->halt_on_error=="yes")
exit();
}
//================輸出信息
function showmes($mes)
{
$f=array("f1"=>"showmessage");
$this->setfile($f);
$this->setvars("message",$mes);
$this->replace($f);
$this->p($f);
}
//================模板處理 模板數據庫
function maketemp_db($name)
{
$tag_name=str_replace(",","','",$name);
$query="select * from td_sh_temp where tag_name in('$tag_name')";
$vars=explode(",",$name);
$res=$this->query($query);
for($i=0;$i<sizeof($vars);$i++)
{
$x=$this->fetch_arr($res);
$this->temp_db[$x['tag_name']]="<!-- ".$x['tag_name']." -->\n".$x['tag_value']."\n<!-- /".$x['tag_name']." -->\n\n";
}
}
//********************************************
//================模板處理 模板文件
//-----------------在$vars和$vals中設定變量
//若有多個變量設置,則設置在$handle數組中
function setvars($handle,$value="")
{
if(!is_array($handle))
{
if($value=="")
{
$this->wrong("變量".$handle."的值為空!");
return false;
}
$this->vars[$handle]=$handle;
$this->vals[$handle]=$value;
}
else
{
reset($handle);
while(list($k,$v)=each($handle))
{
$this->vars[$k]=$k;
$this->vals[$k]=$v;
}
}
}
//-----------------設置模板文件名
function filename($file)
{
$filename=$this->file_dir."/".$file.$this->file_ext;
return $filename;
}
//-----------------將文件名存放在數組$files中
//若有多個文件,則設置在$handle數組中
function setfile($handle,$file="")
{
if(is_array($handle))
{
while(list($k,$v)=each($handle))
{
$this->files[$k]=$this->filename($v);
}
}
else
{
if($file=="")
{
$this->wrong("文件名為空!");
}
else
{
$this->files[$handle]=$this->filename($file);
}
}
}
//------------------讀取變量$file中$handle對應的文件,將存放在數組$vars和$vals中
function loadfile($handle)
{
if(!is_array($handle))
{
if(isset($this->vars[$handle])&&isset($this->vals[$handle]))
return true;
if(!isset($this->files[$handle])) //沒有設定$handle對應的文件
{
$this->wrong("句柄".$handle."沒有設置!");
}
else
{
$f=@file($this->files[$handle]); //讀入文件
$f=@implode("",$f);
if(empty($f))
{
$this->wrong("文件".$this->files[$handle]."為空或者不存在!");
return false;
}
$this->setvars($handle,$f);
return true;
}
}
else
{
while(list($k,$v)=each($handle))
{
$this->loadfile($k);
}
}
}
//-----------------變量替換1
function rep($handle)
{
$str=$this->vals[$handle];
reset($this->vars);
reset($this->vals);
while(list($k,$v)=each($this->vars))
{
$str=str_replace("{*".$this->vars[$k]."*}",$this->vals[$k],$str);
$str=str_replace("{**".$this->vars[$k]."**}",$this->vals[$k],$str);
}
return $str;
}
//-----------------變量替換2
function replace($handle,$target="")
{
$this->loadfile($handle);
if(!is_array($handle))
{
$str=$this->rep($handle);
$this->setvars($target,$str);
}
else
{
reset($handle);
while(list($k,$v)=each($handle))
{
$str=$this->rep($k);
$this->setvars($k,$str);
}
}
}
//-----------------塊變量替換
function block_rep($s_b_name,$handle) //$s_b_name 表示原文件中的Block name ,$handle 表示設置後的替換名稱
{
$str = $this->rep($s_b_name);
if(empty($this->vals[$handle]))
$repped = "";
else
$repped = $this->vals[$handle];
$repped .= $str;
$this->setvars($handle,$repped);
}
//-----------------刪除無法替換的內容
function rem($str)
{
$str=eregi_replace("\{\*[_a-z]+\*\}"," ",$str);
$str=eregi_replace("\{\*\*[_0-9a-z]+\*\*\}","",$str);
return $str;
}
//-----------------顯示
function p($target)
{
if(!is_array($target))
{
echo $this->rem($this->vals[$target]);
}
else
{
while(list($k,$v)=each($target))
{
echo $this->rem($this->vals[$k])."\n";
}
}
}
//------------------設置 Block
function setblock($parent,$block_name,$name) //將$parent中的名稱為$block_name的Block替換成{*$name*}
{
if(!$this->loadfile($parent))
{
$this->wrong("無法裝載".$parent."!");
return false;
}
$str=$this->vals[$parent];
$reg = "/<!--\s+Begin $block_name\s+-->(.*)<!--\s+End $block_name\s+-->/sm";
preg_match_all($reg,$str,$m);
$str=preg_replace($reg,"{*$name*}",$str); //置換Block部分為 {*$name*} 形式
// $this->setvars($name,$m[1][0]);
$this->setvars($block_name,$m[1][0]);
$this->setvars($parent,$str);
}
}
?>
class myclass
{
var $temp_db;
var $files=array(); //模板文件名
var $file_ext=".htm"; //模板文件後輟
var $file_dir="template"; //模板文件目錄
var $unknown="remove"; //若沒有找到替換的變量的處理方法
//del 刪除變量 undo 保持不變 comment 替換為注釋
var $halt_on_error="yes"; //在發生錯誤時停止程序
var $error=""; //最後一個錯誤內容
var $vars=array(); //存放元素索引
var $vals=array(); //存放元素值
function myclass($dir="",$ext="")
{
if($dir)
$this->file_dir=$dir;
if($ext)
$this->file_ext=$ext;
}
//================連接數據庫
function con($host,$user,$psw)
{
if(!@mysql_connect($host,$user,$psw))
{
$this->showmes("<font color=\"#FF0000\"><ul><li>無法連接數據庫!</ul></li></font>");
exit();
}
}
//================選擇數據庫
function close()
{
return mysql_close();
}
//================選擇數據庫
function selectdb($dbname)
{
if(!@mysql_select_db($dbname))
{
$this->showmes("<font color=\"#FF0000\">無法連接數據庫!</font>");
exit();
}
}
//================連接選擇數據庫
function c_all($host,$user,$psw,$dbname)
{
$this->con($host,$user,$psw);
$this->selectdb($dbname);
mysql_query("SET NAMES UTF8");
}
//================執行SQL查詢
function query($query)
{
return mysql_query($query);
}
//================獲取查詢結果
function fetch_arr($query)
{
return mysql_fetch_array($query);
}
function fetch_row($query)
{
return mysql_fetch_row($query);
}
//================獲取結果數目
function num_rows($query)
{
return mysql_num_rows($query);
}
//================獲取結果數目
function errno()
{
return mysql_errno();
}
//================輸出錯誤
function wrong($mes)
{
$this->error=$mes;
echo "<font color=\"#FF0000\">".$mes."</font>";
if($this->halt_on_error=="yes")
exit();
}
//================輸出信息
function showmes($mes)
{
$f=array("f1"=>"showmessage");
$this->setfile($f);
$this->setvars("message",$mes);
$this->replace($f);
$this->p($f);
}
//================模板處理 模板數據庫
function maketemp_db($name)
{
$tag_name=str_replace(",","','",$name);
$query="select * from td_sh_temp where tag_name in('$tag_name')";
$vars=explode(",",$name);
$res=$this->query($query);
for($i=0;$i<sizeof($vars);$i++)
{
$x=$this->fetch_arr($res);
$this->temp_db[$x['tag_name']]="<!-- ".$x['tag_name']." -->\n".$x['tag_value']."\n<!-- /".$x['tag_name']." -->\n\n";
}
}
//********************************************
//================模板處理 模板文件
//-----------------在$vars和$vals中設定變量
//若有多個變量設置,則設置在$handle數組中
function setvars($handle,$value="")
{
if(!is_array($handle))
{
if($value=="")
{
$this->wrong("變量".$handle."的值為空!");
return false;
}
$this->vars[$handle]=$handle;
$this->vals[$handle]=$value;
}
else
{
reset($handle);
while(list($k,$v)=each($handle))
{
$this->vars[$k]=$k;
$this->vals[$k]=$v;
}
}
}
//-----------------設置模板文件名
function filename($file)
{
$filename=$this->file_dir."/".$file.$this->file_ext;
return $filename;
}
//-----------------將文件名存放在數組$files中
//若有多個文件,則設置在$handle數組中
function setfile($handle,$file="")
{
if(is_array($handle))
{
while(list($k,$v)=each($handle))
{
$this->files[$k]=$this->filename($v);
}
}
else
{
if($file=="")
{
$this->wrong("文件名為空!");
}
else
{
$this->files[$handle]=$this->filename($file);
}
}
}
//------------------讀取變量$file中$handle對應的文件,將存放在數組$vars和$vals中
function loadfile($handle)
{
if(!is_array($handle))
{
if(isset($this->vars[$handle])&&isset($this->vals[$handle]))
return true;
if(!isset($this->files[$handle])) //沒有設定$handle對應的文件
{
$this->wrong("句柄".$handle."沒有設置!");
}
else
{
$f=@file($this->files[$handle]); //讀入文件
$f=@implode("",$f);
if(empty($f))
{
$this->wrong("文件".$this->files[$handle]."為空或者不存在!");
return false;
}
$this->setvars($handle,$f);
return true;
}
}
else
{
while(list($k,$v)=each($handle))
{
$this->loadfile($k);
}
}
}
//-----------------變量替換1
function rep($handle)
{
$str=$this->vals[$handle];
reset($this->vars);
reset($this->vals);
while(list($k,$v)=each($this->vars))
{
$str=str_replace("{*".$this->vars[$k]."*}",$this->vals[$k],$str);
$str=str_replace("{**".$this->vars[$k]."**}",$this->vals[$k],$str);
}
return $str;
}
//-----------------變量替換2
function replace($handle,$target="")
{
$this->loadfile($handle);
if(!is_array($handle))
{
$str=$this->rep($handle);
$this->setvars($target,$str);
}
else
{
reset($handle);
while(list($k,$v)=each($handle))
{
$str=$this->rep($k);
$this->setvars($k,$str);
}
}
}
//-----------------塊變量替換
function block_rep($s_b_name,$handle) //$s_b_name 表示原文件中的Block name ,$handle 表示設置後的替換名稱
{
$str = $this->rep($s_b_name);
if(empty($this->vals[$handle]))
$repped = "";
else
$repped = $this->vals[$handle];
$repped .= $str;
$this->setvars($handle,$repped);
}
//-----------------刪除無法替換的內容
function rem($str)
{
$str=eregi_replace("\{\*[_a-z]+\*\}"," ",$str);
$str=eregi_replace("\{\*\*[_0-9a-z]+\*\*\}","",$str);
return $str;
}
//-----------------顯示
function p($target)
{
if(!is_array($target))
{
echo $this->rem($this->vals[$target]);
}
else
{
while(list($k,$v)=each($target))
{
echo $this->rem($this->vals[$k])."\n";
}
}
}
//------------------設置 Block
function setblock($parent,$block_name,$name) //將$parent中的名稱為$block_name的Block替換成{*$name*}
{
if(!$this->loadfile($parent))
{
$this->wrong("無法裝載".$parent."!");
return false;
}
$str=$this->vals[$parent];
$reg = "/<!--\s+Begin $block_name\s+-->(.*)<!--\s+End $block_name\s+-->/sm";
preg_match_all($reg,$str,$m);
$str=preg_replace($reg,"{*$name*}",$str); //置換Block部分為 {*$name*} 形式
// $this->setvars($name,$m[1][0]);
$this->setvars($block_name,$m[1][0]);
$this->setvars($parent,$str);
}
}
?>