그누보드에 멀티 카테고리를 사용해보자! > 그누3 팁자료실

그누3 팁자료실

그누보드에 멀티 카테고리를 사용해보자! 정보

그누호환 그누보드에 멀티 카테고리를 사용해보자!

첨부파일

section.zip (44.5K) 208회 다운로드 2004-02-18 22:21:53

본문

<?
/*-------------------------------------------------
* 그누 연동 다중 카테고리 관리
*
* 제작완료: 2004. 1. 8
* 제작자: 학식
-------------------------------------------------*/

1.

/*------------------------------------------------------------------
*    함수 모음 (절취선 ~ /절취선 까지 /lib/developer.lib.php 에 잘라넣으세요)
------------------------------------------------------------------*/
//-------------------------------절취선-------------------------------
//
// 필드 값 1개만 받아올때 사용
//
function sql_result($sql, $row=0, $fld=0) {
    return @
mysql_result(mysql_query($sql), $row, $fld);
}

//
// 중복검사
//
function is_duple($table, $fields, $val) {
    
$sql = "SELECT COUNT(*) FROM $table WHERE $fields = '$val'";
    
$row = sql_fetch($sql);

    if(
$row[0] > 0) alert("중복됩니다.");
}
function
is_duple2($table, $bo_table, $fields, $val) {
    
$sql = "SELECT COUNT(*) FROM $table WHERE bo_table='$bo_table' and $fields = '$val'";
    
$row = sql_fetch($sql);

    if(
$row[0] > 0) alert("중복됩니다.");
}

//
// 섹션 목록 얻어오기
//
function get_section_option($table, $key_prefix, $val='') {

    global
$doc;

    
$sql = "SELECT * FROM $table ORDER BY {$key_prefix}_id";
    
$result = sql_query($sql);

    
$selected = (!$val)? "selected" : "";
    
$str = "<option $selected>전체</option>\n";
    while(
$row = mysql_fetch_assoc($result)) {
        
$selected = ( $row[$key_prefix.'_id'] == $val )? "selected" : "";
        
$s_history = get_section($table, $key_prefix, $row[$key_prefix.'_id'], 0);

        
$str .= "<option value='".$row[$key_prefix.'_id']."' $selected>".$s_history."</option>\n";
    }
    
mysql_free_result($result);

    return
$str;
}

//
// 섹션 얻어오기
//
function get_section($table, $key_prefix, $val='', $link=1, $doc='') {

    if(!isset(
$doc)) {
        global
$HTTP_SERVER_VARS;

        
$doc = $HTTP_SERVER_VARS[PHP_SELF];
    }

    if(
$val)
    {
        
$str = ($link == 1)? "<a href='./?doc=$doc'>HOME</a> > " : ""; //첫페이지
        
$depth = (strlen($val) / 2) ;

        for(
$i=1;$i<=$depth;$i++)
        {
            
$parent = substr($val, 0, $i*2);
            
$where = $where."{$key_prefix}_id='$parent' ";
            if(
$i!=$depth) { $where = $where."or ";}
        }

        
$sql = " SELECT * FROM $table WHERE $where" ;
        
$result = sql_query($sql) ;

        for(
$i=1; $row = mysql_fetch_array($result); $i++)
        {
            
$parent = substr($val, 0, $i*2);

            if(
$i != $depth) {
                
$str .= "<a href='./?doc=$doc&{$key_prefix}_id=$parent'>".$row[$key_prefix.'_name']."</a> > ";
            } else {
                
$str .= "<b>".$row[$key_prefix.'_name']."</b>";
            }
        }
    } else {
$str = "<b>HOME</b>"; }

    return (
$link == 1)? $str : strip_tags($str);
}

//
// 상위카테고리를 포함하는 카테고리 만들기에서 두자리 계산에 사용
//
function catePlus($cchar){
    
$a = substr($cchar, 0, 1);
    
$b = substr($cchar, 1, 2);
    
// 48(0) ~ 57(9) | 65(A) ~ 90(Z) | 97(a) ~ 122(z)
    
$na = Ord($a);
    
$nb = Ord($b);

    if(
$na == '122' && $nb == '122') {
        return
0;
    } else {

        if(
$nb == '122'){
            if(
$na == '57'){
                
$na = 65;
            } else if(
$na == '90') {
                
$na = 97;
            } else if(
$na == '122') {
                
$na = 48;
            } else if(
'48' <= $na && $na < '57') {
                
$na = $na + 1;
            } else if(
'65' <= $na && $na < '90') {
                
$na = $na + 1;
            } else if(
'97' <= $na && $na < '122') {
                
$na = $na + 1;
            } else {
                return
0;
            }
        }
        if(
$nb == '57'){
            
$nb = 65;
        } else if(
$nb == '90') {
            
$nb = 97;
        } else if(
$nb == '122') {
            
$nb = 48;
        } else if(
'48' <= $nb && $nb < '57') {
            
$nb = $nb + 1;
        } else if(
'65' <= $nb && $nb < '90') {
            
$nb = $nb + 1;
        } else if(
'97' <= $nb && $nb < '122') {
            
$nb = $nb + 1;
        } else {
            return
0;
        }

    }
    
$ca = chr($na);
    
$cb = chr($nb);
    
$cateChr = $ca.$cb;
    return
$cateChr;
}
//
// 상위카테고리를 포함하는 카테고리 만들기에서 두자리 계산에 사용 #2
//
function catePlus2($cate, $base = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") {
    if( (
$n = strlen($cate) - 1) < 0) return $base{0};
    
$ln = strpos($base, substr($cate, $n));
    return (++
$ln == 62)? sprintf("%s0",catePlus(substr($cate, 0, $n))) : sprintf("%s%s",substr($cate, 0, $n),$base{$ln});
}


// 공백필드 검사
//
//    $_Arr = array(
//        "wr_name"    => "이름",
//        "wr_email"        => "이메일"
//    );
//    is_empty($_POST, $_Arr);
//
function is_empty($_VARS, $_VALS) {
    foreach(
$_VALS as $key=>$val) {
        if(
$_VARS[$key] == '') alert("$val 값은 필수입니다.");
    }
}

//-------------------------------/절취선-------------------------------
?>

2.
section.zip 을 그누보드 루트 디렉토리에 올리고, 압축을 해제해 줍니다.

리눅스의 경우 : unzip section.zip [엔터]


3.
"관리자 > 그룹 > 게시판 관리" 에 가셔서
멀티 카테고리를 사용하고픈 보드 코드(그룹ID 옆에 데이터)를 확인하고
인터넷 익스플로러의 주소창에

http://그누보드 경로/?doc=bbs/admin/section.php&bo_table=보드코드

를 타이핑하고 엔터를 쳐서 이동합니다.

(관리자모드에 저렇게 되도록 나중에 링크를 추가해주면 좋겠지요.)


4.
"관리자 > 그룹 > 게시판 관리" 에서 해당 3. 에서 선택했던 테이블의 스킨을 basic_mca 로 바꿔줍니다.
(스킨 basic_mca 가 안보인다면 압축 해제를 잘못하신 것입니다.)


5.
멀티 카테고리 데이터를 만든 후, "관리자 > 그룹 > 게시판 관리" 에서 게시판 테이블로 이동하여 봅시다!


6.
리스트에서는 아직 구현해놓지는 않았고, 글쓰기와 보기에서 나타납니다.


0. {참고}

- 섹션 데이터가 담기는 테이블은 "gb_write_보드명_section" 입니다.

- 보드별 섹션 관리자 접근 URL : http://그누보드 경로/?doc=bbs/admin/section.php&bo_table=보드코드

- 섹션 데이터의 키값과 매칭되는 필드를 일단 "gb_write_보드명" 의 "wr_1" 필드로 지정하였습니다.

- 글쓰기에서 다중 카테고리를 현재의 분류와 비슷한 셀렉트 상자에 넣고 고르게 하고 싶으시면

   1. 에서 추가한 함수 중
   <select ....>
   echo get_section_option("gb_write_보드명_section", "s", $write[wr_1]);
   </select>
   를 사용하시면 됩니다.
  예제) gbform.skin.php
get_section_option002.jpg
get_section_option001.jpg

- 역시 보여줄때, "대분류>중분류>소분류>짜근분류 ... " 식으로 한줄 텍스트로 보여주고 싶은 경우

   1. 에서 추가한 함수 중
   echo get_section("gb_write_보드명_section", "s", $write[wr_1], $link=1, $doc);
   을 사용하여 출력하여 주시면 됩니다.
  예제) gbview.skin.php
get_section002.jpg
get_section001.jpg

{마치며...}

한번 구현해본것이라서 모르고 지워버린 소스들과 그때의 기억을 되살려 만들어 봤습니다.
아쉬운 점이 있다면, 멀티 카테고리 관리 폼에서 삭제를 했을때, s_id 가 당겨지고 밀어져야 하는데,
그것을 아직 구현하지 못했습니다.
기타 급조에 의한 아쉬운 부분이 많을 것입니다.
고수분들은 직접 해결하시옵고, 저와 같은 하수 분들은 리플을 달아주시면 실력은 부족하나마,
패치작업을 해보겠습니다.

많고 많은 은인거사들께서 뛰어난 내공으로 미진한점을 메꾸어 주시리라 믿어 의심치 않습니다.
추천
0

댓글 전체

그런데 몇일전만해도 스킨 다운받으면 포인트 업되던데 이제는 스킨 다운받아도 게시자에게 포인트 안 주는것 같던데 변경되었나요??
학식님 먼저번 주신 팁도 잘 적용 했습니다.
이건 머리 좀 식히면 해봐야 겠습니다.
감사합니다.

zzzz님이 포인트를 모으시나 봅니다. --;
7쟁이님 3.26 나온다는 소문이 .... --;
전체 1,026
그누3 팁자료실 내용 검색

회원로그인

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