热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » PHP/Perl编程 » php无限分类生成树状的类

php无限分类生成树状的类

论坛链接
  • php无限分类生成树状的类
  • 发布时间:2007-10-05 11:31:17    浏览数:7393    发布者:webptr    设置字体【   
一个无限分类生成树状的类,一次数据查询,数据结构简单.<?php

//一次数据库操作,无限分类,树状显示


class CategoryClass {
var $prefix = "tb_"; //表前缀
var $table = "category"; //表名称
var $prikeyfield = "cid"; //分类编号,smallint primary auto_increment
var $parentfield = "pid"; //上级分类编号,如果是根分类则pid=0; smallint
var $categoryfield = "CategoryName"; //分类名称
var $orderfield = "displayorder"; //排序字段

var $Category_name = array(); //所有分类名称数组,key是类别编号,var是类别名称
var $Target_Category = array(); //目标分类数组,便于输出树状结构
var $option = array(); //得到的排序后的数状数组,生成select options
var $order_array = array(); //所有类别的排序数组,key是类别编号,var是排序字段


function init($prefix,$table,$prikeyfield,$parentfield,$categoryfield,$orderfield){
$this->prefix = $prefix;
$this->table = $this->prefix.$table;
$this->prikeyfield = $prikeyfield;
$this->parentfield = $parentfield;
$this->categoryfield = $categoryfield;
$this->orderfield = $orderfield;
//得到所有数据
$this->getData();
}


//添加分类
function Add($category_name, $pid=0) {
global $db;
$query = $db->query("SELECT * FROM ".$this->table." WHERE ".$this->categoryfield."='".$category_name."'");
if($db->num_rows($query)) {
return false;
} else {
$db->query("INSERT INTO ".$this->table." (".$this->categoryfield.",
".$this->parentfield.") VALUES ('".$category_name."', '".$pid."')");
return true;
}
}
//得到所有分类数据
function getData() {
global $db;
$query = $db->query("SELECT * FROM ".$this->table." ORDER BY ".$this->orderfield." ASC");
while ($sort = $db->fetch_array($query)) {
$this->Target_Category[$sort[$this->parentfield]][$sort[$this->prikeyfield]] = $sort;
$this->Category_name[$sort[$this->prikeyfield]] = $sort[$this->categoryfield];
$this->order_array[$sort[$this->prikeyfield]] = $sort[$this->orderfield];
}
$db->free_result($query);
}
/***
* $sortid: 类别ID, 0表示生成所有类别的树状select option
* $p : 是否显示本身(例如:如果要找出sortid=1的所有子类及其本身,则P=1)
*
* 根据类别ID,找到所有子类,生成$option
*/
function getArrayById($sortid = "0", $p="1", $level = 1) {
$tmp_array=array();
foreach($this->Target_Category AS $k => $v) {
$tmp_array[]=$k;
}
if(!empty($this->Category_name)) {
if(!in_array($sortid, $tmp_array)) {
if($p==1) $this->option[$sortid] = $this->Category_name[$sortid];
} else {
foreach($this->Target_Category[$sortid] AS $key => $sort) {
if($sortid != '0' && $p=='1') {
$this->option[$sortid] = $this->Category_name[$sortid];
$level = 2;
}
$m = ($sortid==$sort[$this->prikeyfield]||$sortid==0) ? "" : "|- ";
$this->option[$sort[$this->prikeyfield]] = str_repeat(" ", $level-1) .$m.$sort[$this->categoryfield];
$this->getArrayById($sort[$this->prikeyfield], '0', $level + 1);
}
}
}
}

//更新分类排序
function updateOrder($cid, $displayorder) {
global $db;
$db->unbuffered_query("UPDATE ".$this->table." SET ".$this->orderfield."='".$displayorder."' WHERE ".$this->prikeyfield."='".$cid."'");
}

//更新类别数据
function updateCategoryData($category_name, $pid, $cid) {
global $db;
$db->unbuffered_query("UPDATE ".$this->table." SET ".$this->categoryfield."='".$category_name."',
".$this->parentfield."='".$pid."' WHERE ".$this->prikeyfield."='".$cid."'");
}

//得到指定类别数据
function getCategoryData($cid) {
global $db;
return $db->fetch_one_array("SELECT * FROM ".$this->table." WHERE ".$this->prikeyfield."='".$cid."'");
}

//删除指定类别数据
function deleteCategoryData($cid) {
global $db;
$db->query("DELETE FROM ".$this->table." WHERE ".$this->prikeyfield."='".$cid."'");

}

//删除指定类别及其所有子类
function deleteAllCategoryData($cid) {
global $db;
$sql = '';
$this->getArrayById($cid,1);
foreach($this->option AS $key => $var) {
$sql .=$key.",";
}
$sql = "DELETE FROM ".$this->table." WHERE ".$this->prikeyfield." IN (".substr($sql,0,-1).")";
$db->query($sql);
}

}
?>
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理