일주일 전에 이 글을 썼는데, 꽤 잘 사용하고 있습니다.
주요 아이디어 출처: http://www.phpobject.net/b...[url=http://www.phpobject.net/blog/read.php?49][/url]
여기서는 원리를 너무 길게 설명하지 않고 바로 코드를 보내드립니다.
추신: 이 코드는 직접 사용할 수 없으며 다른 라이브러리 클래스와 결합해야 합니다. 생각이 가장 중요하다고 말해야 합니다. 여기서는 주로 분류 아이디어를 제공합니다.
코드 복사 코드는 다음과 같습니다.
/**
--
-- 表적 유형 `daxue8_category`
--
CREATE TABLE `daxue8_category` (
`cid` smallint(6) NULL 자동 증가가 아님,
`pid` smallint(6) NOT NULL 기본값 '0',
`level` smallint(6) NOT NULL 기본값 '0',
`cname` char(64) NOT NULL 기본값 '',
`lft` smallint(6) NOT NULL 기본값 '0',
`rgt` smallint(6) NOT NULL 기본값 '0',
`uid` mediumint(8) NOT NULL 기본값 '0',
`사용자 이름 ` char(32) NOT NULL 기본값 '',
`ctime` int(10) NOT NULL 기본값 '0',
`cstate` tinyint(1) NOT NULL 기본값 '0',
`gnum ` mediumint(8) NOT NULL 기본값 '0',
`orderstyle` smallint(3) NOT NULL 기본값 '0',
PRIMARY KEY (`cid`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
--
-- 导take表中的数据 `daxue8_category`
--
`daxue8_category` 값에 삽입(1, 0, 1, '루트', 1, 2, 0, ' 정리', 1163608814, 1, 0, 0);
*/
클래스 카테고리
{
var $module
var $tbname;
*
* 하위 노드 추가
* @param array $node 추가할 하위 노드의 속성
* @param int $pid 상위 노드의 ID
*/
function add($node,$pid){
//노드가 이미 존재하는지 확인
if($node_exist=$this->mod ule-> 세부정보(' where pid='.$pid.' 및 cname=''.$node['cname'].''')){
.$node['cname'].'이미 존재합니다!') ;
//print_r($node_exist); $pnode=$this->get_by_cid($pid)
//다른 노드 업데이트
$this->module-> ;query('update `'.$this-> ;tbname.'' set lft=lft 2 where lft>'.$pnode['rgt'])
$this->module->query( 'update `'.$this->tbname.'`set rgt=rgt 2 where rgt>='.$pnode['rgt'])
//새 노드 삽입
$node[' pid']=$pid
$node[ 'lft']=$pnode['rgt']
$node['rgt']=$pnode['rgt']
$ node['level']=$pnode['level' ] 1;//레벨에 하나 추가
return $this->module->add($node)
}
/ **
* 노드 삭제
* @param $ cid 삭제할 노드의 ID
* @param $delete_childern 노드에 하위 노드가 있는 경우 강제 삭제 여부.설정이 true가 아닌 경우 자식 노드가 있는 경우 삭제에 실패하고 false를 반환합니다.
* *
*/
function delete($cid,$delete_childern=false)
{
//노드 정보 가져오기
$node=$this->get_by_cid($cid)
if(($this->child_num($node)>0)&&(!$delete_childern)) $this-> ;error(__FUNCTION__.'(): 이 노드에는 하위 노드가 있습니다!');
//노드와 모든 하위 노드 삭제
$this->module->delete('where lft between '.$node['lft'].' and '.$node ['rgt']);
//해당 왼쪽 및 오른쪽 키 값 수정
$plus=$node['rgt']-$node['lft'] 1
$this; ->모듈 ->query('update `'.$this->tbname.'` set lft=lft-'.$plus.' where lft>'.$node['rgt'])
$this- >module->query('update `'.$this->tbname.'` set rgt=rgt-'.$plus.' where rgt>'.$node['rgt']) ;
true 반환
}
/**
* 노드 업데이트
* @param array $set update set
* @param int $cid 업데이트된 노드의 기본 키 ID
*/
function update($set,$cid){
return $this->module->update( $set,' where cid='.$cid);
}
/**
* 노드 및 하위 노드 선택
* @param int $cid 노드의 기본 키 ID
* @param int $deep 선택 깊이
*/
function select($cid,$deep=0)
{
/ /노드 정보 가져오기
$node=$this->get_by_cid($cid)
$where='where lft between '.$node['lft'].' ']
if(!empty($deep))$where.=' 및 level<'.$node['level'] $deep
if($deep==1){
$where.= ' 주문 스타일 설명으로 주문';
{
$node=$this->get_by_cid($cid); this->module->select('where lft<='.$node['lft'].' and rgt> ='.$node['rgt'].' 왼쪽 asc'로 정렬
}
/**
* 하위 노드 선택*/
함수 get_children($pid,$deep=0){
//获取节点信息
$pnode=$this->get_by_cid($pid) ;
$where='lft>'.$pnode['lft'].' 및 rgt<'.$pnode['rgt'];
if(!empty($deep))$where.=' 및 level<='.($pnode['level'] $deep);
if($deep==1){
$where.=' 주문 스타일별로 주문';
}else{
$where.=' lft asc로 주문';
}
return $this->module->select($where);
}
/**
* 딥 레이어 하위 노드 가져오기
* @param int $cid 노드의 기본 키 ID
* @param int $deep 선택 깊이
*/
함수 get_level_children($pid,$deep){
//获取节点信息
$pnode=$this->get_by_ 시드($ PID);
$where='lft>'.$pnode['lft'].' 및 rgt<'.$pnode['rgt'];
$where.=' 및 level='.($pnode['level'] $deep);
$where.=' 주문 스타일 순서대로 주문';
return $this->module->select($where);
}
/**
* 노드 정보 가져오기
* @param $cid 노드의 기본 키 ID
* @return array $node
*/
함수 get_by_cid($cid){
$node=$this->module->detail('where cid='.$cid );
if(!$node)$this->error(__FUNCTION__.'():获取节点'.$cid.'失败!'); ['lft']-1)/2;
}
/**
* 하위 노드 수 가져오기
* @param array $node 노드 정보
* @return num
*/
함수 표시($cid)
{ select($cid); > foreach($nodes as $node){
echo str_repeat(' ',$node['level']-1).$node['cname']."n"
----- -*/
함수 오류($msg){
die('ERROR: file '.__FILE__.' function '.$msg)
}
}
?> >
위에는 공공기관의 분류 및 추진에 관한 의견을 소개한 것입니다. 제가 며칠 전에 쓴 무한분류 항목에는 공공기관의 분류 및 추진에 관한 의견이 포함되어 있어 관심 있는 친구들에게 도움이 되었으면 좋겠습니다. PHP 튜토리얼.