分类:
2009-06-03 15:44:03
define("SITE_PATH",$_SERVER["DOCUMENT_ROOT"]);
class Config
{
const dbtype="mysql";
const dbhost="localhost";
const dbname="root";
const dbpassword="123456";
const db="z_gov";
const dbcharset="gb2312";
const sitename="延边自治州公安局网络监察处";
private $city=array("支队","龙井","和龙","图们","安图","汪清","敦化","珲春");
private $lv=array("一级","二级","三级");
protected $PDO=null;
static $instance=null;
protected function __construct()
{
$dns=self::dbtype.":host=".self::dbhost.";dbname=".self::db.";charset=".self::dbcharset;
$this->;PDO=new PDO($dns,self::dbname,self::dbpassword);
$this->;PDO->query("set names gb2312");
}
public static function getInstance()
{
if(self::$instance == null)
{
self::$instance = new Config();
}
return self::$instance;
}
public function getPDO()
{
return $this->;PDO;
}
public function showMessage($messid)
{
header("Location:error.php?messid=".$messid);
}
public function Execute($sql)
{
$this->;PDO->exec($sql);
}
public function showCity($selectedStr="支队")
{
foreach($this->city as $val)
{
if($val==$selectedStr)
{
echo "\r\n";
}else {
echo "\r\n";
}
}
}
public function showLevel($selectedStr="一级")
{
foreach($this->lv as $val)
{
if($val==$selectedStr)
{
echo "\r\n";
}else {
echo "\r\n";
}
}
}
}
?>
require_once("config.class.php");
/**
* T.T.R无限分类生成类
*请自行建立以下字段:classid parentid classname
*表明请自行建立并修改相应常量,
*/
class TTR_Class extends Config
{
const classtable="class";
const tag_id="";
const tag_name="";
private $reptag=array(
"tag_spanceimg"=>"
",
"tag_haschildimg"=>"
",
"tag_nochildimg"=>"
",
"tag_endchildimg"=>"
",
"tag_childimg"=>"
",
"tag_childline"=>"
"
);
private $tag=array();
static $instance=null;
private $classarray=array();
private $newclassarray=array();
private $keyarr=array();
private $delidarray=array();
private $parentidarray=array();
private $classstr=null;
private $template=null;
private $select=null;
private $menujs="m_js=new Array();\n";
protected function __construct()
{
parent::__construct();
$this->tag=array(self::tag_id ,self::tag_name );
}
public static function getInstance()
{
if(self::$instance == null)
{
self::$instance = new TTR_Class();
}
return self::$instance;
}
public function addClass($classname,$parentid=0)
{
$sql="insert into ".self::classtable ."(parentid,classname) values('$parentid','$classname')";
$this->PDO->query($sql);
$this->showMessage(1);
}
public function delClass($classid)
{
if($this->hasChild($classid))
{
$this->delidarray[]=$classid;
$this->getAllChild($classid);
foreach ($this->delidarray as $val)
{
$sql="delete from ".self::classtable ." where classid='$val'";
$this->PDO->query($sql);
}
}else {
$sql="delete from ".self::classtable ." where classid='$classid'";
$this->PDO->query($sql);
}
$this->showMessage(2);
}
public function editClass($classid,$classname)
{
$sql="update ".self::classtable." set classname='$classname' where classid='$classid'";
$this->PDO->query($sql);
$this->showMessage(3);
}
private function getAllChild($classid)
{
//if(in_array($classid,$this->keyarr))
//{
foreach ($this->classarray[$classid] as $val)
{
$this->delidarray[]=$val[0];
if($this->hasChild($val[0])) $this->getAllChild($val[0]);
}
//}
}
private function setClassArray()
{
$sql="select * from ".self::classtable ." order by parentid,classid";
$rs=$this->PDO->query($sql);
$rs->setFetchMode(PDO::FETCH_ASSOC);
$arr=$rs->fetchAll();
foreach ($arr as $val)
{
$this->classarray[$val["parentid"]][]=array($val["classid"],$val["classname"]);
}
foreach($this->classarray as $key=>$val)
{
$this->keyarr[]=$key;
}
}
public function Build($str="")
{
$this->setClassArray();
$this->setTemplate($str);
}
//生成树状菜单
public function createTree($n=0,$lv=0)
{
foreach($this->classarray[$n] as $key=>$val)
{
if($n==0)
{
if($this->hasChild($val[0]))
{
$this->classstr.=str_replace($this->tag,array($val[0],$this->spanceImage($lv,$val[0]).$this->reptag["tag_haschildimg"]."".$val[1].""),$this->template);
}else{
$this->classstr.=str_replace($this->tag,array($val[0],$this->spanceImage($lv,$val[0]).$this->reptag["tag_nochildimg"]."".$val[1].""),$this->template);
}
}else{
$temparray=end($this->classarray[$n]);
if($temparray[0]==$val[0])
{
if($this->hasChild($val[0]))
{
$this->classstr.=str_replace($this->tag,array($val[0],$this->spanceImage($lv,$val[0]).$this->reptag["tag_endchildimg"].$this->reptag["tag_haschildimg"].$val[1]),$this->template);
}else{
$this->classstr.=str_replace($this->tag,array($val[0],$this->spanceImage($lv,$val[0]).$this->reptag["tag_endchildimg"].$this->reptag["tag_nochildimg"].$val[1]),$this->template);
}
}else{
if($this->hasChild($val[0]))
{
$this->classstr.=str_replace($this->tag,array($val[0],$this->spanceImage($lv,$val[0]).$this->reptag["tag_childimg"].$this->reptag["tag_haschildimg"].$val[1]),$this->template);
}else{
$this->classstr.=str_replace($this->tag,array($val[0],$this->spanceImage($lv,$val[0]).$this->reptag["tag_childimg"].$this->reptag["tag_nochildimg"].$val[1]),$this->template);
}
}
}
if(in_array($val[0],$this->keyarr)) $this->createTree($val[0],$lv+1);
}
}
//生成下拉菜单
public function createSelect($selectedid=0,$n=0,$lv=0)
{
foreach($this->classarray[$n] as $key=>$val)
{
//echo $selectedid."=>".$val[0].",";
//echo $val[0]."->".$selectedid."=>".$selected;
if($selectedid==$val[0])
{
$selected="selected=\"seleceted\"";
}
if($n==0)
{
$this->select.="";
}else{
$temparray=end($this->classarray[$n]);
if($temparray[0]==$val[0])
{
$this->select.=".$this->setSelectSpance($lv,$val[0])."└ $val[1]";
}else{
$this->select.=".$this->setSelectSpance($lv,$val[0])."├ $val[1]";
}
}
$selected=null;
if(in_array($val[0],$this->keyarr)) $this->createSelect($selectedid,$val[0],$lv+=1);
}
}
private function setSelectSpance($n,$id)
{
$lv=$id;
$idarr=array();
$str=null;
for($i=0;$i<$n;$i++)
{
$lv=$this->getParentId($lv);
$idarr[]=$lv;
}
$idarr=array_reverse($idarr);
foreach($idarr as $val)
{
$upclass=$this->getParentId($val);
@$tempid=end($this->classarray[$upclass]);
if($upclass!=0)
{
if($tempid[0]==$val)
{
$str.=" ";
}else{
$str.="│ ";
}
}
}
return $str;
}
private function hasChild($key)
{
return in_array($key,$this->keyarr);
}
private function getParentId($id)
{
$reid=null;
foreach($this->keyarr as $v)
{
foreach($this->classarray[$v] as $key=>$val)
{
if($val[0]==$id)
{
$reid=$v;
}
}
}
return $reid;
}
private function spanceImage($n,$id)
{
$lv=$id;
$idarr=array();
$str=null;
for($i=0;$i<$n;$i++)
{
$lv=$this->getParentId($lv);
//$str.=$str.=$this->reptag["tag_childline"];
$idarr[]=$lv;
}
$idarr=array_reverse($idarr);
foreach($idarr as $val)
{
$upclass=$this->getParentId($val);
$tempid=end($this->classarray[$upclass]);
if($upclass!=0)
{
if($tempid[0]==$val)
{
$str.=$this->reptag["tag_spanceimg"];
}else{
$str.=$this->reptag["tag_childline"];
}
}
}
return $str;
//return implode("",$idarr);
}
private function setTemplate($str)
{
$this->template=$str;
}
public function getClassStr()
{
return $this->classstr;
}
public function getSelect()
{
return $this->select;
}
public function showBigClass()
{
foreach ($this->classarray[0] as $val)
{
echo " .$val[0]."\" onMouseOver=\"showDiv('$val[0]','".$this->getMenuStr($val[0])."')\">".$val[1]." ";
}
}
public function getClassArray()
{
return $this->classarray;
}
public function getClassChild($classid)
{
$this->delidarray=null;
if($this->hasChild($classid))
{
$this->delidarray[]=$classid;
$this->getAllChild($classid);
}else{
$this->delidarray[]=$classid;
}
return $this->delidarray;
}
private function setParentPathArray($classid)
{
if($this->getParentId($classid)!=0)
{
$this->parentidarray[]=$this->getParentId($classid);
$this->setParentPathArray($this->getParentId($classid));
}
}
public function getClassName($classid)
{
foreach ($this->classarray[$this->getParentId($classid)] as $val)
{
if($val[0]==$classid)
{
$str=$val[1];
break;
}
}
return $str;
}
public function getParentPathString($classid)
{
$this->parentidarray[]=$classid;
$this->setParentPathArray($classid);
$this->parentidarray=array_reverse($this->parentidarray);
foreach ($this->parentidarray as $val)
{
$str.=".$val."\">".$this->getClassName($val).">";
}
return "首页>".substr($str,0,strlen($str)-1);
}
private function getMenuStr($classid)
{
foreach ($this->classarray[0] as $arr)
{
if($arr[0]!=$classid)
{
$a[]=$arr[0];
}
}
return implode("|",$a);
}
private function createJsArray($n,$jsarrname="m_js")
{
foreach ($this->classarray[$n] as $arr)
{
$this->menujs.=$jsarrname."[".$arr[0]."]=new Array(\"".$arr[0]."\",\"".$arr[1]."\");\n";
if(in_array($arr[0],$this->keyarr)) $this->createJsArray($arr[0],$jsarrname."[".$arr[0]."]");
}
}
//取得JS无限分类数组
public function getJsArray()
{
$this->createJsArray(0);
return $this->menujs;
}
public function showClassDiv()
{
foreach ($this->classarray[0] as $arr)
{
echo "\n";
echo "\n";
echo "\r\r\n";
}
}
public function getRootClassId()
{
foreach ($this->classarray[0] as $arr)
{
$a[]=$arr[0];
}
return implode("|",$a);
}
}
?>
使用方法:
$str=" ";
$a=TTR_Class::getInstance($str);
?>
编号 栏目名称
echo $a->getClassStr();?>