티로그

DB 테이블에 저장된 카테고리를 트리형식으로 변수에 담기

· 2019-09-23 (월) 16:39:22 · 3398 · 2

head.php 에서 보면 메뉴 카테고리를 $menu_datas 에 담는 코드가 있습니다.

카테고리 깊이가 2단이니까 for 문을 2번 돌려 $menu_datas 의 변수에 담습니다. 직관적입니다.

 

카테고리 플러그인 작업중에 카테고리 데이타를 변수에 담기위해 너무 많이 sql문을 실행하는 것 같아 다른 방식으로 구현해봤습니다.

테이블 형식은 다르고 깊이를 좀 자유롭게 두고 싶어습니다.
PHP변수에 담았다가 json형식으로 반환하는 코드입니다.

테이블 형식은 다음과 같습니다.

CREATE TABLE `tl_dir_zone` (

  `d_id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `d_path` varchar(100) DEFAULT NULL,

  `d_name` varchar(100) DEFAULT NULL,

  `d_type` varchar(10) DEFAULT NULL,

  `d_1` varchar(255) NOT NULL DEFAULT '',
  `d_2` varchar(255) NOT NULL DEFAULT '',
  `d_3` varchar(255) NOT NULL DEFAULT '',
  `d_4` varchar(255) NOT NULL DEFAULT '',
  `d_5` varchar(255) NOT NULL DEFAULT ''

  PRIMARY KEY (`d_id`),

  KEY `idx_d_path` (`d_path`)

) DEFAULT CHARSET=utf8;

 

[code]

<?php

include './_common.php';

if($LT != 1) exit; //표현타입이 2 이면 종료(법정동처럼 너무 큰 데이타는 다른형식으로 dir_list_x.php 참조)

 

$json_file = G5_DATA_PATH.'/'.$DIR_TABLE.'_all.json';

$is_cache_used = true; 

$cache_time = 60*60*1; // 캐쉬(1시간)

if ($is_cache_used === true && file_exists($json_file) && filectime($json_file) > time() - cache_time) { 

  echo file_get_contents($json_file);

  exit;

}

// 필드를 적절히 수정 : json 파일 크기 줄이기 위해

$sql = "SELECT d_path, d_name, d_type, CHAR_LENGTH(d_path) dd FROM {$DIR_TABLE} ORDER BY d_path";   //dd : dir depth

$result = sql_query($sql);

 

$TMPM = array();

$DIRM = array();

while ($row = sql_fetch_array($result)) {

    $depth = $row['dd'] / $DS;

    if($depth == 1) {

        $DIRM[$row['d_path']] = $row;

    } else {

        $p_path = substr($row['d_path'], 0 , ($DS * -1));

        $TMPM[$p_path][$row['d_path']] = $row;

    }

}

function tree_dir(&$p_row) {

    global $TMPM;

    foreach($p_row as $k=>$v) {

        if(isset($TMPM[$v['d_path']])) {

            $p_row[$k]['rows'] = $TMPM[$k];

            tree_dir($p_row[$k]['rows']);

        }

    }

}

tree_dir($DIRM);

$json = json_encode($DIRM, JSON_UNESCAPED_UNICODE);

if ($is_cache_used === true) {

    file_put_contents($json_file, $json);

}

echo $json;

?>

[/code]
 

위의 코드를 이용한  다단 selectbox 예입니다.
http://note.tloghost.kr/plugin/tl_dir/ex-niceselect.php

|

댓글 2개

검색 활용에 큰 도움 됩니다.. 공부하면서 질문드리겠습니다.. 감사합니다~
흠 트리구조라 기존에 그누보트 카테고리가 1단계라 딮한 카테고리 구현할떄 삽질 많이 했는데 잘쓰 곘습니다 ㅎㅎ
댓글을 작성하시려면 로그인이 필요합니다.

개발자팁

5,403건

개발과 관련된 유용한 정보를 공유하세요. 질문은 QA에서 해주시기 바랍니다.

+
분류 제목 글쓴이 날짜 조회
MySQL 20-02-13 조회 3,486
기타 20-01-29 조회 2,629
PHP 20-01-26 조회 3,300
기타 20-01-19 조회 1만
웹서버 20-01-18 조회 3,779
기타 20-01-15 조회 2,627
PHP 20-01-12 조회 4,206
기타 20-01-12 조회 2,680
웹서버 20-01-07 조회 3,525
node.js 20-01-06 조회 2,810
PHP 19-12-19 조회 4,321
기타 19-12-05 조회 2,833
JavaScript 19-12-02 조회 3,095
웹서버 19-11-19 조회 4,935
JavaScript 19-11-05 조회 3,393
JavaScript 19-11-04 조회 2,543
JavaScript 19-11-01 조회 2,653
JavaScript 19-10-31 조회 2,679
PHP 19-10-29 조회 2,729
기타 19-10-26 조회 3,594
JavaScript
[JavaScript]
19-10-17 조회 2,685
JavaScript 19-09-25 조회 2,915
jQuery 19-09-24 조회 2,680
PHP 19-09-23 조회 3,399
기타 19-09-08 조회 3,222
PHP 19-09-03 조회 5,392
기타 19-08-10 조회 2,719
정규표현식 19-08-08 조회 2,971
정규표현식 19-08-05 조회 3,328
웹서버 19-08-05 조회 4,820