[导入][转载]一个无限分类处理类PHP代码:-------------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
<?php 
[导入][转载]一个无限分类处理类
/* 名称: 对分类操作的业务逻辑封装 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类* 说明: 本类中引用的其它类(DB、Table、Item)均未提供,所以本类只能做个参考,不能直接应用 
[导入][转载]一个无限分类处理类* 不是本人小气不提供其它类,实在是因为那些都是一两年前写的类,很烂。怕大家看后对大 
[导入][转载]一个无限分类处理类* 造成误导. 在此发表这个类,只希望大家能从中学到一些程序设计的方法。 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类* 特点: 
[导入][转载]一个无限分类处理类* 采用递归调用的方法,对分类数据只需一次数据库查询可生成树状结构。 无限递归层次(视机器堆栈而定) 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类* 数据库定义: 
[导入][转载]一个无限分类处理类* ID smallint unsigned primary #如果数据量很大可用int 
[导入][转载]一个无限分类处理类* ParentID smallint unsigned index #如果数据量很大可用int, 请索引此字段 
[导入][转载]一个无限分类处理类* #如果为根分类,则ParentID = 0 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类* RootID smallint unsigned index #如果数据量很大可用int, 请索引此字段 
[导入][转载]一个无限分类处理类* #如果是根分类则RootID = 0, 否则RootID = 最上层的父分类ID 
[导入][转载]一个无限分类处理类* CategoryName varchar(n) #此大小自定 
[导入][转载]一个无限分类处理类* 如需有其它字段定义附在后面 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类* 注意事项: 
[导入][转载]一个无限分类处理类* 不要试图直接调用本类,除非你有和我定义那另外那几个类相对应的接口, 否则不会成功 
[导入][转载]一个无限分类处理类* 在合适的地方定义 DBTABLE_CATEGORY 这个常量 190-711 190-721  ,使其指向你的分类数据表名字 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类* 程序构架: 
[导入][转载]一个无限分类处理类* ├─基础类 <!-- 完成底层数据库操作、数据抽象、语言、模板、异常、杂项等)操作 --> 
[导入][转载]一个无限分类处理类* │ 
[导入][转载]一个无限分类处理类* │ 
[导入][转载]一个无限分类处理类* └─业务逻辑层(此类所处层次) <!-- 利用基础类中数据操作、数据抽象等类根据表现层传递的参数完成数据处理,并返回数据或操作结果 --> 
[导入][转载]一个无限分类处理类* │ 
[导入][转载]一个无限分类处理类* │ 
[导入][转载]一个无限分类处理类* └───表现层(用户界面) <!-- 利用业务逻辑层将取得的数据或操作数据的结果通过基础类中的界面等类进行显示 --> 
[导入][转载]一个无限分类处理类
*/ 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
define('DBTABLE_CATEGORY', 'xxx'); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
class Category_Logic 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
var $KernelRef = NULL//系统核心的引用 
[导入][转载]一个无限分类处理类
var $tblObj = NULL//包含当前分类数据 Table 类的实例 
[导入][转载]一个无限分类处理类

[导入][转载]一个无限分类处理类
var $_CurrentItem = NULL//包含当前分类数据 TItem类的实例 
[导入][转载]一个无限分类处理类

[导入][转载]一个无限分类处理类
var $CategoryID = 0//当前分类ID,如果没有当前分类此项为 0 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//private array GetNodeData(array $Data, int $ParentNode) 
[导入][转载]一个无限分类处理类// 根据一颗指定根的并且以兄弟双亲法表示的树和当前分类的ID,返回当前分类在整个分类表中所处的位置 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $Data 2维数组 Array( 
[导入][转载]一个无限分类处理类// Array( 
[导入][转载]一个无限分类处理类// 'ID' => 分类ID, 
[导入][转载]一个无限分类处理类// 'ParentID' => 父分类ID, 
[导入][转载]一个无限分类处理类// 'RootID' => 根分类ID, 
[导入][转载]一个无限分类处理类// 'CategoryName' => 分类名称, 
[导入][转载]一个无限分类处理类// ), 
[导入][转载]一个无限分类处理类// …… 
[导入][转载]一个无限分类处理类// ); 
[导入][转载]一个无限分类处理类// 表示的一颗树 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ParentNode 父分类ID, 每一次由调用者给出,递归时由程序计算传递 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回以兄弟双亲法表示的所有分类的树 
[导入][转载]一个无限分类处理类// 注意: 确保当前分类已经设置,否则此函数无返回 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function GetNodeData($Data, $ParentNode
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$arr = Array(); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$ArrayCount = 0
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
for($i = 0, $cnt = Count($Data); $i < $cnt$i++
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($Data[$i]['ParentID'== $ParentNode
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$arr[$ArrayCount= $Data[$i]; 
[导入][转载]一个无限分类处理类
$arr[$ArrayCount++]['Child'= $this->GetNodeData($Data, $Data[$i]['ID']); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $arr
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//private String _CurrentLevel(array $Data, int $Current, String $ProcessFunc = '') 
[导入][转载]一个无限分类处理类// 根据一颗指定根的并且以兄弟双亲法表示的树和当前分类的ID,返回当前分类在整个分类表中所处的位置 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $Data 兄弟双亲法表示的树, 由调用者传递 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $Current 当前分类ID,第一次调用时由调用者给出,递归时由程序自行计算 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ProcessFunc 指定对分类数据的处理函数, 函数原型定义见 $this->PrintCurrentLevel 中的注释 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回当前分类在分类树中的位置 
[导入][转载]一个无限分类处理类// 注意: 确保当前分类已经设置,否则此函数无返回 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function _CurrentLevel($Data, $Current, $ProcessFunc = ''
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
for($i = 0$i < Count($Data); $i++
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($Data[$i]['ID'== $Current
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($Data[$i]['ParentID'!= 0
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$str = $this->_CurrentLevel($Data, $Data[$i]['ParentID'], $ProcessFunc. ' -&gt; '
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($ProcessFunc$str .= $ProcessFunc($Data[$i]); 
[导入][转载]一个无限分类处理类
else $str .= $Data[$i]['CategoryName']; 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
else 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($ProcessFunc$str = $ProcessFunc($Data[$i]); 
[导入][转载]一个无限分类处理类
else $str = $Data[$i]['CategoryName']; 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
break
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $str
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public Category_Logic(Object &$Kernel, int $CategoryID = -1) 
[导入][转载]一个无限分类处理类// 本类构造函数 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $Kernel 此参数为当前系统核心类的一个引用, 核心类中包括 
[导入][转载]一个无限分类处理类// 数据库类、输入输出类、系统配置类等 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $CategoryID 当前分类ID。 
[导入][转载]一个无限分类处理类// 当想调用 PrintCurrentLevel、GetRootID、GetParentID、GenerateTypeTreeList及 
[导入][转载]一个无限分类处理类// 调用_CurrentItem成员的方法时请先设置此值. 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// 调用GenerateTypeTreeList时设置此值,则没有ID为此的分类默认被选择,没设置则无默认 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: none 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function &Category_Logic(&$Kernel, $CategoryID = -1
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->KernelRef = &$Kernel
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->tblObj = new Table($Kernel->DBObj, DBTABLE_CATEGORY); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($CategoryID != -1
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->SetCategoryID($CategoryID); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public void SetCategoryID(int $CategoryID) 
[导入][转载]一个无限分类处理类// 设置当前分类ID 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: none 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function SetCategoryID($CategoryID
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if(!$CategoryIDreturn
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$Item = new TItem($this->KernelRef->DBObj, DBTABLE_CATEGORY, '*', $CategoryID ,'ID'); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->_SelfData = &$Item
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->CategoryID = $CategoryID
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public int GetRootID() 
[导入][转载]一个无限分类处理类// 返回当前分类的根分类ID 
[导入][转载]一个无限分类处理类// 注意:只有设置的当前分类时此函数才有效 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回当前分类的根分类ID 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function GetRootID() 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $this->_SelfData->Get('RootID'); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public int GetParentID() 
[导入][转载]一个无限分类处理类// 返回当前分类的父分类ID 
[导入][转载]一个无限分类处理类// 注意:只有设置的当前分类时此函数才有效 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回当前分类的父分类ID 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function GetParentID() 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($this->CategoryID) return $this->_SelfData->Get('ParentID'); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public String GenerateTypeTreeList(array $Data, String $ProcessFunc, int $floor = 0) 
[导入][转载]一个无限分类处理类// 返回整个分类的树状结构放在OptionList中的列表 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $Data 此参数由 $this->DumpTypeDataToTree() 返回 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ProcessFunc 处理显示分类信息的回调函数, 函数原型请参照: $this->PrintCurrentLevel() 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $floor 本参数不能人为给出,是程序自动计算的中间值 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 
[导入][转载]一个无限分类处理类// 结构为一颗兄弟双亲表示法表示的树 
[导入][转载]一个无限分类处理类// 设如分类数据如下: 
[导入][转载]一个无限分类处理类// ├──1级分类 
[导入][转载]一个无限分类处理类// │ 
[导入][转载]一个无限分类处理类// │ 
[导入][转载]一个无限分类处理类// │ 
[导入][转载]一个无限分类处理类// ├─2级分类 
[导入][转载]一个无限分类处理类// │ │ 
[导入][转载]一个无限分类处理类// │ └─3级分类 
[导入][转载]一个无限分类处理类// │ 
[导入][转载]一个无限分类处理类// └─2级分类 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// 则返回值为 Array( 
[导入][转载]一个无限分类处理类// 0 => Array( 
[导入][转载]一个无限分类处理类// 'ID' => '', 
[导入][转载]一个无限分类处理类// 'ParentID' => '', 
[导入][转载]一个无限分类处理类// 'RootID' => '', 
[导入][转载]一个无限分类处理类// 'CategoryName' => '', 
[导入][转载]一个无限分类处理类// 'Child' => [导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类// ) 
[导入][转载]一个无限分类处理类// [导入][转载]一个无限分类处理类.. 
[导入][转载]一个无限分类处理类// ) 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function DumpTypeDataToTree($RootID = 0, $Fields = '*'
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->tblObj->SetFields($Fields); 
[导入][转载]一个无限分类处理类
$this->tblObj->SetCondition(''); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$List = $this->tblObj->MapResult($this->tblObj->Select()); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $this->GetNodeData($List, $RootID); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public String GenerateTypeTreeList(array $Data, String $ProcessFunc = '', int $floor = 0) 
[导入][转载]一个无限分类处理类// 返回整个分类的树状结构放在OptionList中的列表 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $Data 此参数由 $this->DumpTypeDataToTree() 返回 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ProcessFunc 处理显示分类信息的回调函数, 函数原型请参照: $this->PrintCurrentLevel() 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $floor 本参数不能人为给出,是程序自动计算的中间值 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回一个<option>分类名称1</option> [导入][转载]一个无限分类处理类 <option>分类名称n</option> 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// ps: 调用时echo "<select name='xxxx'>" . $_c->GenerateTypeTreeList($Data, 'ProcessFunc') . "</select>"; 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function GenerateTypeTreeList($Data, $ProcessFunc, $floor = 0
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$Str = ''
[导入][转载]一个无限分类处理类
for($i = 0, $cnt = Count($Data); $i < $cnt$i++
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($this->CategoryID == $Data[$i]['ID']) 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$Str .= "<option value='{$Data[$i]['ID']}' selected>" 
[导入][转载]一个无限分类处理类
. str_repeat("&nbsp;", $floor * 3
[导入][转载]一个无限分类处理类
. '' 
[导入][转载]一个无限分类处理类
. ($ProcessFunc ? $ProcessFunc($Data[$i]) : $Data[$i]['CategoryName']) 
[导入][转载]一个无限分类处理类
. "</option>\n"
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
else 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$Str .= "<option value='{$Data[$i]['ID']}'>" 
[导入][转载]一个无限分类处理类
. str_repeat("&nbsp;", $floor * 3
[导入][转载]一个无限分类处理类
. '' 
[导入][转载]一个无限分类处理类
. ($ProcessFunc ? $ProcessFunc($Data[$i]) : $Data[$i]['CategoryName']) 
[导入][转载]一个无限分类处理类
. "</option>\n"
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($Data[$i]['Child']) $Str .= $this->GenerateTypeTreeList($Data[$i]['Child'], $ProcessFunc, $floor + 1); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $Str
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public String GenerateTypeTreeView(array $Data, String $ProcessFunc = '') 
[导入][转载]一个无限分类处理类// 返回整个分类的树状结构视图 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $Data 此参数由 $this->DumpTypeDataToTree() 返回 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ProcessFunc 处理显示分类信息的回调函数, 函数原型请参照: $this->PrintCurrentLevel() 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回生成的一颗HTML形式显示的树 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function GenerateTypeTreeView($Data, $ProcessFunc
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$Str = '<ul style="Line-Height:200%">'
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
for($i = 0, $cnt = Count($Data); $i < $cnt$i++
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($ProcessFunc$Str .= '<li>' . $ProcessFunc($Data[$i]) . '</li>' . "\n"
[导入][转载]一个无限分类处理类
else $Str .= '<li>' . $Data[$i]['CategoryName'. '</li>' . "\n"
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($Data[$i]['Child']) $Str .= '<li>' . $this->GenerateTypeTreeView($Data[$i]['Child'], $ProcessFunc. '</li>'
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$Str .= '</ul>'
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $Str
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public String PrintCurrentLevel(String $ProcessFunc = '') 
[导入][转载]一个无限分类处理类// 对多级分类生成当前位置字符串 
[导入][转载]一个无限分类处理类// 设如分类数据如下,当前分类为3级分类, 则调用返回 1级分类 -> 2级分类 -> 3级分类 
[导入][转载]一个无限分类处理类// ├──1级分类 
[导入][转载]一个无限分类处理类// │ 
[导入][转载]一个无限分类处理类// │ 
[导入][转载]一个无限分类处理类// │ 
[导入][转载]一个无限分类处理类// ├─2级分类 
[导入][转载]一个无限分类处理类// │ │ 
[导入][转载]一个无限分类处理类// │ └─3级分类 
[导入][转载]一个无限分类处理类// │ 
[导入][转载]一个无限分类处理类// └─2级分类 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ProcessFunc 此为对分类数据如何显示的回调函数,不设置则直接显示分类名称 
[导入][转载]一个无限分类处理类// 函数定义原型为 function (&$arr); 
[导入][转载]一个无限分类处理类// 其中$arr参数为每一个分类信息的一维数组如下: 
[导入][转载]一个无限分类处理类// array(ID => 1, ParentID => 0, RootID => 0, CategoryName => '1级分类') 
[导入][转载]一个无限分类处理类// 返回值为对上述数据处理的结果,比如返回带链接的分类名字、更改显示颜色等 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回当前分类在整个分类树中所处位置 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function PrintCurrentLevel($ProcessFunc = ''
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if(!$this->CategoryID) return ''
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($this->_SelfData->Get("RootID"== 0
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
if($ProcessFuncreturn $ProcessFunc($this->_SelfData->fetchDataToArray()); 
[导入][转载]一个无限分类处理类
else return $this->_SelfData->Get("CategoryName"); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$Current = $this->CategoryID; 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->tblObj->SetCondition('RootID = ' . $this->_SelfData->Get('RootID'. " or ID = " . $this->_SelfData->Get('RootID')); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$Data = $this->tblObj->MapResult($this->tblObj->Select()); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $this->_CurrentLevel($Data, $Current, $ProcessFunc); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public boolean Add(array $arr) 
[导入][转载]一个无限分类处理类// 添加新分类到分类表中 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $arr 在此数组中包括对新添加分类的定义, 定义如下: 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// $arr['RootID'] 新分类所属的根分类ID 
[导入][转载]一个无限分类处理类// $arr['ParentID'] 新分类的父分类ID 
[导入][转载]一个无限分类处理类// $arr['CategoryName'] 新分类的名称 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回添加分类操作结果 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function Add($arr
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->tblObj->SetFields( 
[导入][转载]一个无限分类处理类
Array
[导入][转载]一个无限分类处理类
'RootID', 
[导入][转载]一个无限分类处理类
'ParentID', 
[导入][转载]一个无限分类处理类
'CategoryName', 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $this->tblObj->Insert( 
[导入][转载]一个无限分类处理类
Array
[导入][转载]一个无限分类处理类
$arr['RootID'], 
[导入][转载]一个无限分类处理类
$arr['ParentID'], 
[导入][转载]一个无限分类处理类
$arr['CategoryName'], 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public boolean Delete(int $ID) 
[导入][转载]一个无限分类处理类// 删除已经存在的分类 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ID 要删除的分类ID 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回删除分类操作结果 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function Delete($ID
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$sysOption = &$this->KernelRef->Config; 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->tblObj->SetFields('*'); 
[导入][转载]一个无限分类处理类
$this->tblObj->SetCondition('ID = ' . (int)$ID); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $this->tblObj->Delete(); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public boolean Modify(int $ID, array $arr) 
[导入][转载]一个无限分类处理类// 修改已经存在的分类 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ID 要修改的分类ID 
[导入][转载]一个无限分类处理类// @param: $arr 在此数组中包括修改后的分类定义, 定义如下: 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// $arr['RootID'] 新分类所属的根分类ID 
[导入][转载]一个无限分类处理类// $arr['ParentID'] 新分类的父分类ID 
[导入][转载]一个无限分类处理类// $arr['CategoryName'] 新分类的名称 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回修改分类操作结果 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function Modify($ID, $arr
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->tblObj->SetCondition('ID = ' . (int)$ID); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$prev = $this->tblObj->MapOneRow($this->tblObj->Select()); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->tblObj->SetFields( 
[导入][转载]一个无限分类处理类
Array
[导入][转载]一个无限分类处理类
'RootID', 
[导入][转载]一个无限分类处理类
'ParentID', 
[导入][转载]一个无限分类处理类
'CategoryName', 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $this->tblObj->Update($arr); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
//--------------------------------------------------------------------------- 
[导入][转载]一个无限分类处理类//public array Modify(int $ID) 
[导入][转载]一个无限分类处理类// 修改已经存在的分类 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// @param: $ID 指定的分类ID 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类// return value: 返回指定ID分类的信息 
[导入][转载]一个无限分类处理类// 数组中包括: 
[导入][转载]一个无限分类处理类// Array( 
[导入][转载]一个无限分类处理类// 'ID' => 分类ID, 
[导入][转载]一个无限分类处理类// 'ParentID' => 父分类ID, 
[导入][转载]一个无限分类处理类// 'RootID' => 根分类ID, 
[导入][转载]一个无限分类处理类// 'CategoryName' => 分类名称, 
[导入][转载]一个无限分类处理类// ); 
[导入][转载]一个无限分类处理类// 
[导入][转载]一个无限分类处理类//--------------------------------------------------------------------------- 

[导入][转载]一个无限分类处理类
function GetCategory($ID
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
$this->tblObj->SetCondition('ID = ' . (int)$ID); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
return $this->tblObj->MapOneRow($this->tblObj->Select()); 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类
?> 
[导入][转载]一个无限分类处理类
[导入][转载]一个无限分类处理类

阿门119 2007-12-19 17:22 发表评论

文章来源:http://www.phpweblog.net/susam119/archive/2007/12/19/2573.html

相关文章:

  • 2021-05-18
  • 2021-07-10
  • 2022-12-23
  • 2022-12-23
  • 2021-06-28
  • 2021-11-05
猜你喜欢
  • 2022-12-23
  • 2021-06-06
  • 2022-12-23
  • 2022-01-12
  • 2022-12-23
  • 2021-12-03
相关资源
相似解决方案