728x90

jsTree 는 MIT 에서 공개한 jquery plugin 으로 HTML 또는 JSON 데이터를 Tree 형식으로 화면에 출력해주는 라이브러리이다.

https://www.jstree.com/ 에서 jquery plugin 설명을 참조한다.

여기서 다루는 jstree.js 는 include 해보니 jstree.min.js 와 약간 다른지 tree 아이콘 모양이 달라서 jstree.min.js 를 사용했다.


본 자료는 구글링을 통해서 얻은 지식으로 기존 자료에 부족한 사항을 추가했다.

기본적인 설명은 http://phpflow.com/php/dynamic-tree-with-jstree-php-and-mysql/ 사이트에 잘 나와있다.

관리자가 메뉴를 추가/수정/삭제하는 기능도 이 사이트에 잘 나와 있다.

다만 아쉬웠던 것은 Treeview 에서 아이템을 클릭하면 해당 ITEM에 연결된 link 를 다른 <div>에 뿌려주는 것이 되어야 Treeview 의 의미가 있으므로 이 부분 처리를 하려고 열심히 검색하고 찾았는데 ....

포기하고 생각을 변경하여 시도를 한 끝에 원하는 결과를 얻었다.

이 과정에서 고수의 도움을 받았는데 알고 보면 생각의 전환만 했어도 쉽게 해결할 수 있었던 사항이다.


=== 테이블 구조 ===

CREATE TABLE IF NOT EXISTS `treeview_items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` varchar(11) DEFAULT NULL,
  `name` varchar(200) NOT NULL,
  `text` varchar(200) NOT NULL,
  `link` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;


INSERT INTO `treeview_items` (`id`, `parent_id`, `name`, `text`, `link`) VALUES
(1, '0', 'MySQL', 'MySQL', '#'),
(2, '0', 'Java', 'Java', '#'),
(3, '0', 'PHP', 'PHP', '#'),
(4, '3', '투토리얼', '투토리얼', 'http://link2me.tistory.com'),
(5, '3', 'PHP Script', 'Script', '#'),
(6, '5', '메일', '메일', '#'),
(7, '2', 'Java Tutorial', 'Tutorial', '#'),
(8, '2', 'Java Resources', 'Resources', '#'),
(9, '1', 'MySQL Tutorial', 'Tutorial', '#'),
(10, '5', '로그인', '로그인', 'http://www.naver.com'),
(11, '3', 'PHP Resources', 'Resources', '#'),
(12, '10', 'Login1', 'Login1', ''),
(13, '10', 'Login2', 'Login2', ''),
(14, '3', '추가노드', '추가노드', '');


=== tree.php ===

<!DOCTYPE html>
<head>
<meta charset=UTF-8" />
<meta name="robots" content="noindex,nofollow"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
<meta http-equiv="X-UA Compatible" control="IE=edge,chrome=1" />
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css">
<link rel="stylesheet" href="js/jstree/style.min.css">
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
<script src="js/jstree/jstree.min.js"></script>

<script type="text/javascript">
$(document).ready(function(){
    $('#tree-container').jstree({
        'plugins': ["wholerow"],
        'core' : {
            'data' : {
                "url" : "tree_getdb.php",
                "dataType" : "json"
            }
        }
    }).on("changed.jstree", function (e, data) {
        if(data.selected.length) {
            var id = data.instance.get_node(data.selected[0]).id;
            $.post('tree_link_result.php', {id: id}, function(data){
                //alert(data);
                $('.content').html(data);
            });
        }
    });

});
</script>
</head>
<body>
<div class="container-fluid"><!--container-fluid 클래스 선택자는 전체 화면을 사용할 때 사용 -->
  <div class="container"><!--container 클래스 선택자는 최대 넓이가 1170px -->
    <div class="col-md-2">
      <!--사이드바 내용-->
        <div id="tree-container"></div>
    </div>
    <div class="col-md-10">
        <div class="content">
          <!--본문 내용-->
          본문내용
        </div>
    </div>
  </div>
</div>

</body>
</html>


=== tree_link_result.php ===

<?php
$id=$_POST['id'];
if(isset($id) && !empty($id)){
    include_once "connect.php";
    $sql = "SELECT * FROM treeview_items where id='{$id}'";
    $result = mysqli_query($db, $sql);
    if($row=mysqli_fetch_array($result)){
        echo $row['link'];
    }
}
?>


=== on("changed.jstree", function (e, data) { 부분을 아래와 같이 수정해도 된다.

    }).bind("select_node.jstree", function (e, data) {
        var id = data.node.id;
        $.post('tree_link_result.php', {id: id}, function(data){
            //alert(data);
            if(data == '#') return '';
            $('.content').html(data);
        });


나머지 자료는 phpflow.com 과 인터넷에서 구해서 위에 나온 부분만 수정해서 사용하면 문제없이 처리될 것이다.


구글링해서 구해 테스트한 jstree 소스만 첨부한다.

jstree.zip


블로그 이미지

Link2Me

,