PHPTree―phop 빠 른 무한 분류 생 성

바로 PHPTree 입 니 다.
git 주소:https://git.oschina.net/jiusem/PHPTree.git
우리
가장 간단 한 예:

<?php 
require('PHPTree.class.php');

//    ,       
$data = array(
	array(
		'id'=>1,
		'name'=>'book',
		'parent_id'=>0
	),
	array(
		'id'=>2,
		'name'=>'music',
		'parent_id'=>0
	),
	array(
		'id'=>3,
		'name'=>'book1',
		'parent_id'=>1
	),
	array(
		'id'=>4,
		'name'=>'book2',
		'parent_id'=>3
	)
);

$r = PHPTree::makeTree($data);
echo json_encode($r);

?>
출력:
  [
        {
            "id": 1,
            "name": "book",
            "parent_id": 0,
            "expanded":false,//하위 노드 를 펼 치지 않 음
            "children": [
                {
                    "id": 3,
                    "name": "book1",
                    "parent_id": 1,
                    "expanded": false,
                    "children": [
                        {
                            "id": 4,
                            "name": "book2",
                            "parent_id": 3,
                            "leaf": true
                        }
                    ]
                }
            ]
        },
        {
            "id": 2,
            "name": "music",
            "parent_id": 0,
            "leaf": true
        }
]
생 성 된 데 이 터 는 트 리 구조 로 ExtJS 등 전단 프레임 과 결합 하여 사용 할 수 있 습 니 다.git 에 ExtJS 데모 가 포함 되 어 있 으 니 참고 하 시기 바 랍 니 다.
프레젠테이션:

전단 프레임 을 사용 하지 않 고 HTML 로 출력 할 경우 다음 방법 을 사용 할 수 있 습 니 다.
$r = PHPTree::makeTreeForHtml($data);
1 차원 배열 을 얻 고 level 필드 로 분류 하 는 차원 을 표시 합 니 다.

array(
 array(
  'id'=>1,
  'name'=>'    ',
  'parent_id'=>0,
  'level'=>0 //    
 ),
 array(
  'id'=>1,
  'name'=>'    ',
  'parent_id'=>1,
  'level'=>1 //    
 )
 ....
);
select 탭 으로 출력:

echo '<h1>PHPTree    </h1>';
echo '<select style="width:300px;">';
foreach($r as $item){
	echo '<option>';
	//         
	echo str_repeat('......',$item['level']);
	echo $item['name'];
	echo '</option>';
}
echo '</select>';
프레젠테이션:

git 에 HTML 을 출력 하 는 demo 가 포함 되 어 있 습 니 다.참고 하 실 수 있 습 니 다.
데이터베이스 디자인 에 대해 서 는 id 와 parent 만 포함 하도록 보증 해 야 합 니 다.id 필드 면 됩 니 다.다른 필드 는 자체 적 으로 추가 할 수 있 으 며 데이터 생 성 에 영향 을 주지 않 습 니 다.parent_id 는 부모 ID 이 며,1 급 분류 라면 0 으로 설정 합 니 다.물론 필드 도 설정 할 수 있 습 니 다.계속 내 려 다 보 세 요.제 가 진급 하 는 사용 방법 을 소개 하 겠 습 니 다.
하위 노드 펼 치기:

PHPTree::makeTree( $data, array(
 'expanded' => true
));
출력 한 데 이 터 는:
[
        {
            id:1,
            name:'book1',
            expanded:true,//전개 서브 노드
            children:[
                ...
            ]
        }
]
홈 키 와 부모 키 사용자 정의:

//     
$data = array(
 array(
  'order_id'=>1, //  
  'name'=>'book1',
  'pid'=>0, //  
  ...
 )
);
PHPTree::makeTree( $data, array(
 'primary_key' => 'order_id',
 'parent_key' => 'pid'
));
출력 한 데 이 터 는:
[
        {
            order_id:1,
            name:'book1',
            pid:0,
            ...
        }
]
MakeTreeForHtml 방법 도 홈 키 와 부모 키 를 설정 하 는 것 을 지원 합 니 다.
다른 필드 도 사용자 정의 할 수 있 지만 다음 매개 변 수 는 MakeTree 방법 만 지원 합 니 다.

$r = PHPTree::makeTree($data, array(
 'expanded_key' => 'expanded',
 'children_key' => 'children',
 'leaf_key'  => 'leaf'
));
기본적으로 이 필드 의 설정 은 ExtJS 를 참고 로 합 니 다.ztree 프레임 워 크 를 사용 하면 이 필드 들 을 다시 설정 해 야 합 니 다.
ztree 는 강력 한 국산 트 리 프레임 워 크 로 간단 한 JSON 형식 도 지원 하 며 1 차원 데이터 형식 으로 실제 적 으로 PHPTree 를 사용 할 필요 가 없다.물론 PHPTree 가 출력 한 데이터 의 차원 감 이 뚜렷 하고 ztree 도 지원 합 니 다.

좋은 웹페이지 즐겨찾기