그누보드에 멀티 카테고리를 사용해보자! 정보
그누호환 그누보드에 멀티 카테고리를 사용해보자!첨부파일
본문
<?
/*-------------------------------------------------
* 그누 연동 다중 카테고리 관리
*
* 제작완료: 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


- 역시 보여줄때, "대분류>중분류>소분류>짜근분류 ... " 식으로 한줄 텍스트로 보여주고 싶은 경우
1. 에서 추가한 함수 중
echo get_section("gb_write_보드명_section", "s", $write[wr_1], $link=1, $doc);
을 사용하여 출력하여 주시면 됩니다.
예제) gbview.skin.php


{마치며...}
한번 구현해본것이라서 모르고 지워버린 소스들과 그때의 기억을 되살려 만들어 봤습니다.
아쉬운 점이 있다면, 멀티 카테고리 관리 폼에서 삭제를 했을때, s_id 가 당겨지고 밀어져야 하는데,
그것을 아직 구현하지 못했습니다.
기타 급조에 의한 아쉬운 부분이 많을 것입니다.
고수분들은 직접 해결하시옵고, 저와 같은 하수 분들은 리플을 달아주시면 실력은 부족하나마,
패치작업을 해보겠습니다.
많고 많은 은인거사들께서 뛰어난 내공으로 미진한점을 메꾸어 주시리라 믿어 의심치 않습니다.
추천
0
0
댓글 전체
감사감사
공부를 해야되겠습니다. 큰 도움이 된것을 감사드립니다.
무언가 멋있다는 생각이.....
정말 대단하십니다.
혼자 놀기의 진수인듯 합니다.
아~~~!
지롤!
정말 멋지십니다.
혼자 놀기의 진수인듯 합니다.
아~~~!
지롤!
정말 멋지십니다.
이거..끝내주는 팁이군요...
예.
그누는 변화무쌍 합니다.^^
그누는 변화무쌍 합니다.^^
그런데 몇일전만해도 스킨 다운받으면 포인트 업되던데 이제는 스킨 다운받아도 게시자에게 포인트 안 주는것 같던데 변경되었나요??
하하..
이런 것도 만들 수 있군요~~
부럽습니다.
이런 것도 만들 수 있군요~~
부럽습니다.
겁 안납니다^^
다 기록 해놨어요...5.0이 나와도 끄떡없죠^^
다 기록 해놨어요...5.0이 나와도 끄떡없죠^^
학식님 먼저번 주신 팁도 잘 적용 했습니다.
이건 머리 좀 식히면 해봐야 겠습니다.
감사합니다.
zzzz님이 포인트를 모으시나 봅니다. --;
7쟁이님 3.26 나온다는 소문이 .... --;
이건 머리 좀 식히면 해봐야 겠습니다.
감사합니다.
zzzz님이 포인트를 모으시나 봅니다. --;
7쟁이님 3.26 나온다는 소문이 .... --;
대단들 하시군요...
ZZZZ님 어딜가도 선두군요^^
ZZZZ님 어딜가도 선두군요^^
section 을 이용한 보드코드라...
정말 끝나는군요...
다시 지롤이란 그림을 보게 되어.. 방갑습니다.
정말 끝나는군요...
다시 지롤이란 그림을 보게 되어.. 방갑습니다.