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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

개발자팁

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

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

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

본문

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;

 


<?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;
?>

 

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

추천
1

댓글 2개

전체 5,352
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT