게시판을 바꿔(필드추가)보자 1 (gblist.php편) ver1.0정식 정보
일반 게시판을 바꿔(필드추가)보자 1 (gblist.php편) ver1.0정식
본문
그누보드 게시판 필드 추가해보자!
맑은 정신으로 글을 작성해야하는데 작업은 못하겠고 글이나 써봐야겠다는 생각으로 설명을 시작해볼까합니다.
무작정 따라하는 씩으로 갈까합니다. 이유는 조금 아시는분은 이 글의 도움없이도 잘하실수 있기 때문에
전혀 도움안될것이고 그렇타고 초짜인분은 설명해봐야 그리 도움이 되지않는다는 생각 때문입니다. 기본적인방법만
설명해드리면 지지고 복고는 다 가능하리라는 생각에 최대한 단순하게 설명하겠습니다.
설명순서는
1. 그누보드 게시판db 구조
2. 그누보드 게시판db 필드추가
3. gbform.php수정
4. gbview.php수정
5. gbupgrade.php수정
6. 기타사항
1. 그누보드 게시판db 구조
#
# 테이블 구조 `gb_board_test`
#
CREATE TABLE gb_board_test (
bd_id int(11) NOT NULL auto_increment, //게시판 ID번호
ca_id int(11) NOT NULL default '0', //카다로그 ID번호
bd_notice tinyint(4) NOT NULL default '0', //공지체크
bd_num int(11) NOT NULL default '0',
bd_reply varchar(5) NOT NULL default '', //리플체크 A,B,C,D순으로 증가
bd_parent_id int(11) NOT NULL default '0', //리플글 참조 부모bd_id번호
bd_comment int(11) NOT NULL default '0', //커맨트 일련번호
bd_commentcnt int(11) NOT NULL default '0', //총커맨트 수
bd_html tinyint(4) NOT NULL default '0', //html사용여부
bd_secret tinyint(4) NOT NULL default '0', //보호글 설정여부
bd_subject varchar(255) NOT NULL default '', //제목
bd_content text NOT NULL, //내용
bd_test varchar(40) NOT NULL default '', // bd_test라는 필드이름으로 추가를 해보겠다.
bd_link1 varchar(255) NOT NULL default '', //링크1
bd_link2 varchar(255) NOT NULL default '', //링크2
bd_file1 varchar(255) NOT NULL default '', //파일 1
bd_file2 varchar(255) NOT NULL default '', //파일 2
bd_hit int(11) NOT NULL default '0', //히트수
bd_good int(11) NOT NULL default '0', //추천수
bd_nogood int(11) NOT NULL default '0', //비추천수
mb_id varchar(20) NOT NULL default '', //작성자 ID
bd_passwd varchar(16) NOT NULL default '', //패스워드
bd_name varchar(20) NOT NULL default '', //작성자 이름
bd_email varchar(255) NOT NULL default '', //작성자 이메일
bd_homepage varchar(255) NOT NULL default '', //작성자 홈페이지
bd_datetime datetime NOT NULL default '0000-00-00 00:00:00', //등록시간
bd_ip varchar(15) NOT NULL default '', //작성자 IP
bd_user_agent varchar(255) NOT NULL default '',
bd_update_datetime datetime NOT NULL default '0000-00-00 00:00:00', //글수정날짜
bd_update_ip varchar(15) NOT NULL default '', //글수정시 접근 IP
bd_update_user_agent varchar(255) NOT NULL default '',
PRIMARY KEY (bd_id),
KEY index2 (bd_id),
KEY index1 (bd_notice,bd_num,bd_reply)
) TYPE=MyISAM;
기본적인 구도(db와 필드구성)는 이렇게 되어있다.
이 구조에서도 현재버젼 1.03버젼부터 추천제 폐지로 사실적으로는 bd_good, bd_nogood은 필요없는 부분이다.
하지만 확장성을 위해서는 삭제 안하는게 낫다고 생각한다.
일단 자기가 원하는 필드를 하나 추가해보도록 하자!
여기서는 bd_test라는 필드를 추가해보도록하겠다.
필드를 추가하는 방법에는 여러가지방법이 있다.
telnet접속하여 mysql을 실행하는 하는 방법도 있을것이고 파일을 이용하여 mysql -u root -p mysql<gb_board_test.sql이런
방식도 있을것이고 그것도아니면 phpMyAdmin등과같은 웹상에서 DB를 관리할수 있는 프로그램으로도 가능하다.
이것도 저것도 모르는 초보분들은 간단한 방법이 있다. 바로 그방법은
그누보드 gnubora1/manage/sql_board.sql파일을 변경하는 거다 자기가 원하는 필드이름으로 추가해서 적는다.
그런후 저장하고 관리자모드로 들어가서 보드를 추가하게되면 방금추가한 테이블구조로 추가한 게시판 새 테이블이 생성된다. 그걸
그냥 이용하면된다. 단, 그전처럼 내용으로 다시 수정해야겠죠 *^^* 필요없는 공간을 낭비하지않을려면...
그럼 이제 테이블은 다 완성이 되었습니다.
이제 본격적으로 소스를 보겠습니다.
먼저 gblist.php를 보도록하겠다.
/########################################################################################
######## gblist.php 전체소스 ##########
<?
require_once "./lib.inc.php";
require_once "./ets.php";
$tail->시작시간 = get_microtime();
if (!$gb_table) message($table, "게시판 TABLE 값이 넘어오지 않았습니다.<br>$_SERVER[PHP_SELF]?gb_table=xxx와 같은 방식으로 넘겨 주세요.");
if (!is_board($table)) message($table, "{$gb_table} 게시판이 존재하지 않습니다.");
if ($login_mb[mb_level] < $cfg[list_level]) message($table, "목록을 볼 권한이 없습니다.");
if (!$cfg[use_access] && ($login_mb[mb_level] < $cfg[level_group_admin]) && ($login_mb[gr_id] != $cfg[id]))
message($table, "타그룹 회원은 접근할 수 없습니다.", "./");
// 여기까지는 에러처리부분 및 기타 기본적인게 들어있죠?
// 보드이름을 넣지않거나 가끔씩 화면에 나오는 에러 메시지 gb_table=xxx와 같은 방식으로 넘겨 주세요. 이 문장도 여기서
// 바로 확인을 하게 됩니다. gb_table(게시판이름)값이 없으명 당연히 화면에 무엇을 뿌려줄지 알수가 없기때문에
// gb_table변수값이 있는지 없는지 확인하여 화면에 에러메세지를 뿌려주는거죠!
$body->게시판 = $gb_table; //gblist.php?gb_table=test같은 방법으로 $gb_table으로 넘어온 보드이름을 $body->게시판변수에 넣는다.
$body->검색선택 = $sselect; //gblist.php?gb_table=tes&sslect=bd_subject같은 방식으로 검색필드값을 검색선택변수값에 넣는다.
$body->검색어 = $stext; //gblist.php?gb_table=tes&sslect=bd_subjec&stext=자료 같은방식으로 검색어를 넘긴다.
$body->회원디렉토리 = $cfg[dir_member]; //이건 회원의 아이콘이 등록되었다면 그 회원디렉토리에서 아이콘을 불러와야하기때문에 필요합니다.
$body->게시판크기 = $cfg[table_width] . (($cfg[table_width] <= 100) ? "%" : ""); //게시판크기는 세로폭을 말하는데 800*600화면에 800다보여주면
//사실 그리 이쁜화면이 나오지 않습니다. 좌우 여백을주기위해서 기본설정값에서 95%정도 사용합니다.
//물론 임의로 수정이 가능합니다.
$body->제목길이 = $cfg[subject_len]; //기본설정게 설정된 제목길이를변수 나중에 짜르기를 위해서 읽어옮니다.
$body->로그인회원아이디 = $login_mb[mb_id]; //설명이 필요없는 현재 로그인 아이디를 읽어들입니다.
if ($cfg[use_category]) {
$body->분류사용 = $cfg[use_category]; //config.inc.php에서 분류사용여부를 읽어들여 출력될 변수에 넘긴다.
$body->분류옵션 = get_category_option($table_category); //카다로그테이블에서 카다로그내용을 분류옵션으로 넘긴다.
}
$rows = $cfg[page_rows];
// 검색어가 있다면
if ($stext) {
$sql_search = get_sql_search($sselect, $stext);
// 원글만 얻는다
$sql = " select distinct bd_parent_id from $table where (1) $sql_search ";
$result = sql_query_error($sql);
$total_count = mysql_num_rows($result);
// 오늘 등록된 게시물 건수
$sql = " select distinct bd_parent_id from $table where (1) $sql_search and DATE_FORMAT(bd_datetime, '%Y-%m-%d') = CURDATE() ";
$result = sql_query_error($sql);
$today_count = mysql_num_rows($result);
} else {
$sql_search = "";
// 페이지 계산, 우선 전체열의 수를 얻고 게시판의 열의 수로 나누어서 전체페이지수를 얻는다
$sql = " select count(*) from $table where bd_comment = '0' ";
$row = sql_fetch_array($sql);
$total_count = $row[0];
// 오늘 등록된 게시물 건수
$sql = " select count(*) from $table where bd_comment = '0' and DATE_FORMAT(bd_datetime, '%Y-%m-%d') = CURDATE() ";
$row = sql_fetch_array($sql);
$today_count = $row[0];
}
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if ($page == "") { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$head->문서제목 = $body->문서제목 = $cfg[subject] . " 목록 : 페이지 $page";
$body->전체게시물건수 = $total_count;
$body->오늘게시물건수 = $today_count;
if ($stext) {
$sql = " select distinct bd_parent_id
from $table
where (1) $sql_search
order by bd_notice, bd_num, bd_reply
limit $from_record, $rows ";
$result = sql_query_error($sql);
$body->전체목록링크 = true;
} else {
$sql = " select *
from $table
where bd_comment = '0'
order by bd_notice, bd_num, bd_reply
limit $from_record, $rows ";
$result = sql_query_error($sql);
$body->전체목록링크 = false;
}
$body->글입력링크 = false;
if ($login_mb[mb_level] >= $cfg[write_level]) {
$body->글입력링크 = true;
}
$body->로그인링크 = null;
$body->로그아웃링크 = null; // 이부분 설명안하는 곳은 천천히 봐보세요!
$body->정보수정링크 = null; // 전체적으로 body라는 변수에 입력하죠!
$body->회원가입링크 = null;
$body->관리자링크 = null;
$body->암호분실링크 = null;
if ($login_mb[mb_id]) {
$body->로그아웃링크 = true;
$body->정보수정링크 = true;
// 관리자인가?
if ($login_mb[mb_level] >= $cfg[level_group_admin]) {
$body->관리자링크 = true;
}
} else {
if ($cfg[use_register]) {
$body->로그인링크 = true;
$body->회원가입링크 = true;
$body->암호분실링크 = true;
}
}
$head->title = "{$cfg[subject]} : 글 목록 [$page 페이지]";
$save_bd_num = $save_bd_notice = 0;
for ($i=0; $row=mysql_fetch_array($result); $i++) {
if ($stext) {
$data = sql_fetch_array(" select * from $table where bd_id = '$row[bd_parent_id]' and bd_comment = '0' ");
$bd_subject = cut_str($data[bd_subject], $cfg[subject_len], "…");
if (ereg("bd_subject", $sselect)) {
$bd_subject = set_search_font($stext, $bd_subject);
$bd_subject = get_text($bd_subject);
$bd_subject = get_search_font($bd_subject);
} else {
$bd_subject = get_text($bd_subject);
}
} else {
$data = $row;
$bd_subject = cut_str($data[bd_subject], $cfg[subject_len], "…");
$bd_subject = get_text($bd_subject);
}
unset($row);
$body->목록[$i]->답변 = null;
if (strlen($data[bd_reply]) > 0)
for ($k=0; $k<strlen($data[bd_reply]); $k++)
$body->목록[$i]->답변 .= " ";
$body->목록[$i]->제목 = $bd_subject;
$body->목록[$i]->회원 = false;
$body->목록[$i]->회원아이콘 = null;
if ($data[mb_id]) {
$mb = get_member($data[mb_id]);
$body->목록[$i]->회원아이콘 = $mb[mb_icon];
$body->목록[$i]->회원 = true;
}
if ($save_bd_num != $data[bd_num] || $save_bd_notice != $data[bd_notice])
$body->목록[$i]->번호 = $data[bd_num];
else
$body->목록[$i]->번호 = false;
$save_bd_num = $data[bd_num];
$save_bd_notice = $data[bd_notice];
$body->목록[$i]->분류 = get_category_name($table_category, $data[ca_id]);
$body->목록[$i]->아이디 = $data[bd_id];
$body->목록[$i]->공지사항 = ($data[bd_notice] == -1) ? true : false;
$body->목록[$i]->코멘트수 = $data[bd_commentcnt];
$body->목록[$i]->이름 = get_text($data[bd_name]);
$body->목록[$i]->일시 = $data[bd_datetime];
$body->목록[$i]->조회수 = $data[bd_hit];
$body->목록[$i]->테스트 = $data[bd_test]; // 이정도부분에다 추가를 해보죠
// $data[bd_test]는 어디서 왔을까요?
// 윗줄 $data = sql_fetch_array(" select * from $table where bd_id = '$row[bd_parent_id]' and bd_comment = '0' ");
// 여기서 왔답니다. 다시말해 자료를 $data라는 변수에 DB(mysql)에서 읽어와서 넣습니다. 그 변수값에
// $data[bd_id] $data[필드명]식으로 읽어들입니다.
// $data[ca_id]
// :
// 이런식으로 들어가있습니다. 이거를 $body->목록이라는 변수에 2차원변수에 집어 넣습니다.
// 이걸 printt($body, "$reldir/$cfg[dir_skin]/$cfg[skin]/gblist.ets");
// 이런씩으로 $body값전체를 넘기는거죠! 어디로 당연히 gblist.ets로 넘기는거겠죠!
// 스킨파일에서는 {조회수}이런씩으로 여기서 집어 넣은 변수값을
// gblist.ets에서 출력하는 기능을하게 됩니다.
// gbview,gbform다 마찬가지겠죠!
// 여기서는 만질게 없습니다.
// 넘 간단한것 갔죠!
$body->목록[$i]->파일아이콘 = false; // 이 false에 대해서 한가지 짚고 넘어가겠습니다.
// 이걸 사용하는건 gblist.ets에서 if문을 사용하지 못합니다.
// 정확하게 php사용이 제한되어있습니다.
// 그래서 다른방법을 사용합니다.(사실 정확한지는 모르겠습니다. 소스흐름이그래서)
// 여기서 true와, false값으로 구분하여 gblist.ets에서
// {var:파일아이콘} 실행부분 {/var:파일아이콘}이런씩으로해서
//만약 파일아이콘이 true이면 실행부분을 출력하게되는겁니다.
if ($data[bd_file1] || $data[bd_file2])
$body->목록[$i]->파일아이콘 = true;
$body->목록[$i]->링크아이콘 = false;
if ($data[bd_link1] || $data[bd_link2])
$body->목록[$i]->링크아이콘 = true;
$body->목록[$i]->새글아이콘 = false;
if ($data[bd_datetime] >= date("Y-m-d H:i:s", time() - ($cfg['new'] * 3600)))
$body->목록[$i]->새글아이콘 = true;
$body->목록[$i]->뜨거운아이콘 = false;
if ($data[bd_hit] >= $cfg[hot])
$body->목록[$i]->뜨거운아이콘 = true;
$body->목록[$i]->전투아이콘 = false;
if ($data[bd_commentcnt] >= $cfg[battle])
$body->목록[$i]->전투아이콘 = true;
$body->목록[$i]->비밀아이콘 = false;
if ($data[bd_secret])
$body->목록[$i]->비밀아이콘 = true;
if ($cfg[category])
$body->목록[$i]->분류 = $data[bd_category];
// 갤러리
$body->목록[$i]->이미지 = $data[bd_file1];
$body->목록[$i]->줄바꿈 = false;
if ($i > 0 && ($i % 5 == 0))
$body->목록[$i]->줄바꿈 = true;
$body->목록[$i]->파일디렉토리 = $cfg[dir_file];
}
$body->자료없음 = false;
if ($i == 0) {
$body->자료없음 = true;
}
$qstr = "gb_table{$uc2}$gb_table{$uc3}sselect{$uc2}$sselect{$uc3}stext{$uc2}$stext{$uc3}page{$uc2}";
$body->페이지 = $page;
$body->페이지목록 = get_paging($cfg[write_pages], $page, $total_page, $rows, "$absdir/gblist.php{$uc1}{$qstr}");
$head->절대경로 = $body->절대경로 = $tail->절대경로 = $absdir;
$head->상대경로 = $body->상대경로 = $tail->상대경로 = $reldir;
$head->스킨디렉토리 = $body->스킨디렉토리 = $tail->스킨디렉토리 = $cfg[dir_skin];
$head->스킨 = $body->스킨 = $tail->스킨 = $cfg[skin];
$head->uc1 = $body->uc1 = $tail->uc1 = $uc1;
$head->uc2 = $body->uc2 = $tail->uc2 = $uc2;
$head->uc3 = $body->uc3 = $tail->uc3 = $uc3;
if ($cfg[include_head]) require_once $cfg[include_head];
if ($cfg[content_head]) echo $cfg[content_head];
printt($head, "$reldir/$cfg[dir_skin]/$cfg[skin]/head.ets"); // 이부분에는 사실 style부분이 부분이라고 해도 과언이 아닙니다.
printt($body, "$reldir/$cfg[dir_skin]/$cfg[skin]/gblist.ets"); // 실제 화면에 출력되는부분이죠~
if ($cfg[content_tail]) echo $cfg[content_tail];
if ($cfg[include_tail]) require_once $cfg[include_tail];
$tail->종료시간 = get_microtime();
$tail->실행시간 = $tail->종료시간 - $tail->시작시간; // 이부분은 템플리트 수행속도를 측정하기위해 넣으신듯합니다.
// 물론 저희가 보면 안나오죠!
// tail.ets에서 {종료시간}, {실행시간}이걸 출력해주면 나옵니다.
// 제가 보기에도 다른 템플리트보다. 속도가 좀 늦은감은 있는듯합니다.
// 하지만 초보인분들이 보기는 편한듯하네요!
// 그리고 엄청난게 많은 게시물을 사용할게 아니라면 왠만한 사이트고
// 초보이시면 ets도 괜찮은듯싶습니다.
printt($tail, "$reldir/$cfg[dir_skin]/$cfg[skin]/tail.ets");
?>
이상 간단하게 적어보았습니다. 사실 이부분은 $body->목록[$i]->테스트 = $data[bd_test]; 이줄 추가해준게 전부 다 입니다.
이해안되시는부분은 즉각 리플을 달아주십시요!
다시 말씀드리지만 제가 초보입니다.
php다룬건 두달정도 밖에 안됩니다. 그런다고 정식적으로 다룬것도 아니고
그젼 프로그램을 해본게 있어서 문법, 함수등을 전혀모르는 상태에서 흐름만보고 수정하는겁니다.
(사실 그만큼의 시간이 없어서 지금공부중)
그렇기 때문에 조금아시는분들에게는 쓰레기 글입니다.
그러나 초보분들에게는 아주 쬐금은 도움이 되면 그나마 쓰레기는 면하리라는 생각에 글을 적습니다.
너무 욕하지 말아주시기를....
두번째로 gblist.ets에대해서 설명해드리겟습니다.
성격이 그래서 그런지 단어사용은 제가 부르고 싶은데로 부릅니다.
남이 알아 먹는다면 굳이 남들이 다 다르게 사용한다고해서 따라할필요는 없다는 생각에서 그렇습니다.
장문을 적는게 처음이라 대개 어색하네요 *^^*
맑은 정신으로 글을 작성해야하는데 작업은 못하겠고 글이나 써봐야겠다는 생각으로 설명을 시작해볼까합니다.
무작정 따라하는 씩으로 갈까합니다. 이유는 조금 아시는분은 이 글의 도움없이도 잘하실수 있기 때문에
전혀 도움안될것이고 그렇타고 초짜인분은 설명해봐야 그리 도움이 되지않는다는 생각 때문입니다. 기본적인방법만
설명해드리면 지지고 복고는 다 가능하리라는 생각에 최대한 단순하게 설명하겠습니다.
설명순서는
1. 그누보드 게시판db 구조
2. 그누보드 게시판db 필드추가
3. gbform.php수정
4. gbview.php수정
5. gbupgrade.php수정
6. 기타사항
1. 그누보드 게시판db 구조
#
# 테이블 구조 `gb_board_test`
#
CREATE TABLE gb_board_test (
bd_id int(11) NOT NULL auto_increment, //게시판 ID번호
ca_id int(11) NOT NULL default '0', //카다로그 ID번호
bd_notice tinyint(4) NOT NULL default '0', //공지체크
bd_num int(11) NOT NULL default '0',
bd_reply varchar(5) NOT NULL default '', //리플체크 A,B,C,D순으로 증가
bd_parent_id int(11) NOT NULL default '0', //리플글 참조 부모bd_id번호
bd_comment int(11) NOT NULL default '0', //커맨트 일련번호
bd_commentcnt int(11) NOT NULL default '0', //총커맨트 수
bd_html tinyint(4) NOT NULL default '0', //html사용여부
bd_secret tinyint(4) NOT NULL default '0', //보호글 설정여부
bd_subject varchar(255) NOT NULL default '', //제목
bd_content text NOT NULL, //내용
bd_test varchar(40) NOT NULL default '', // bd_test라는 필드이름으로 추가를 해보겠다.
bd_link1 varchar(255) NOT NULL default '', //링크1
bd_link2 varchar(255) NOT NULL default '', //링크2
bd_file1 varchar(255) NOT NULL default '', //파일 1
bd_file2 varchar(255) NOT NULL default '', //파일 2
bd_hit int(11) NOT NULL default '0', //히트수
bd_good int(11) NOT NULL default '0', //추천수
bd_nogood int(11) NOT NULL default '0', //비추천수
mb_id varchar(20) NOT NULL default '', //작성자 ID
bd_passwd varchar(16) NOT NULL default '', //패스워드
bd_name varchar(20) NOT NULL default '', //작성자 이름
bd_email varchar(255) NOT NULL default '', //작성자 이메일
bd_homepage varchar(255) NOT NULL default '', //작성자 홈페이지
bd_datetime datetime NOT NULL default '0000-00-00 00:00:00', //등록시간
bd_ip varchar(15) NOT NULL default '', //작성자 IP
bd_user_agent varchar(255) NOT NULL default '',
bd_update_datetime datetime NOT NULL default '0000-00-00 00:00:00', //글수정날짜
bd_update_ip varchar(15) NOT NULL default '', //글수정시 접근 IP
bd_update_user_agent varchar(255) NOT NULL default '',
PRIMARY KEY (bd_id),
KEY index2 (bd_id),
KEY index1 (bd_notice,bd_num,bd_reply)
) TYPE=MyISAM;
기본적인 구도(db와 필드구성)는 이렇게 되어있다.
이 구조에서도 현재버젼 1.03버젼부터 추천제 폐지로 사실적으로는 bd_good, bd_nogood은 필요없는 부분이다.
하지만 확장성을 위해서는 삭제 안하는게 낫다고 생각한다.
일단 자기가 원하는 필드를 하나 추가해보도록 하자!
여기서는 bd_test라는 필드를 추가해보도록하겠다.
필드를 추가하는 방법에는 여러가지방법이 있다.
telnet접속하여 mysql을 실행하는 하는 방법도 있을것이고 파일을 이용하여 mysql -u root -p mysql<gb_board_test.sql이런
방식도 있을것이고 그것도아니면 phpMyAdmin등과같은 웹상에서 DB를 관리할수 있는 프로그램으로도 가능하다.
이것도 저것도 모르는 초보분들은 간단한 방법이 있다. 바로 그방법은
그누보드 gnubora1/manage/sql_board.sql파일을 변경하는 거다 자기가 원하는 필드이름으로 추가해서 적는다.
그런후 저장하고 관리자모드로 들어가서 보드를 추가하게되면 방금추가한 테이블구조로 추가한 게시판 새 테이블이 생성된다. 그걸
그냥 이용하면된다. 단, 그전처럼 내용으로 다시 수정해야겠죠 *^^* 필요없는 공간을 낭비하지않을려면...
그럼 이제 테이블은 다 완성이 되었습니다.
이제 본격적으로 소스를 보겠습니다.
먼저 gblist.php를 보도록하겠다.
/########################################################################################
######## gblist.php 전체소스 ##########
<?
require_once "./lib.inc.php";
require_once "./ets.php";
$tail->시작시간 = get_microtime();
if (!$gb_table) message($table, "게시판 TABLE 값이 넘어오지 않았습니다.<br>$_SERVER[PHP_SELF]?gb_table=xxx와 같은 방식으로 넘겨 주세요.");
if (!is_board($table)) message($table, "{$gb_table} 게시판이 존재하지 않습니다.");
if ($login_mb[mb_level] < $cfg[list_level]) message($table, "목록을 볼 권한이 없습니다.");
if (!$cfg[use_access] && ($login_mb[mb_level] < $cfg[level_group_admin]) && ($login_mb[gr_id] != $cfg[id]))
message($table, "타그룹 회원은 접근할 수 없습니다.", "./");
// 여기까지는 에러처리부분 및 기타 기본적인게 들어있죠?
// 보드이름을 넣지않거나 가끔씩 화면에 나오는 에러 메시지 gb_table=xxx와 같은 방식으로 넘겨 주세요. 이 문장도 여기서
// 바로 확인을 하게 됩니다. gb_table(게시판이름)값이 없으명 당연히 화면에 무엇을 뿌려줄지 알수가 없기때문에
// gb_table변수값이 있는지 없는지 확인하여 화면에 에러메세지를 뿌려주는거죠!
$body->게시판 = $gb_table; //gblist.php?gb_table=test같은 방법으로 $gb_table으로 넘어온 보드이름을 $body->게시판변수에 넣는다.
$body->검색선택 = $sselect; //gblist.php?gb_table=tes&sslect=bd_subject같은 방식으로 검색필드값을 검색선택변수값에 넣는다.
$body->검색어 = $stext; //gblist.php?gb_table=tes&sslect=bd_subjec&stext=자료 같은방식으로 검색어를 넘긴다.
$body->회원디렉토리 = $cfg[dir_member]; //이건 회원의 아이콘이 등록되었다면 그 회원디렉토리에서 아이콘을 불러와야하기때문에 필요합니다.
$body->게시판크기 = $cfg[table_width] . (($cfg[table_width] <= 100) ? "%" : ""); //게시판크기는 세로폭을 말하는데 800*600화면에 800다보여주면
//사실 그리 이쁜화면이 나오지 않습니다. 좌우 여백을주기위해서 기본설정값에서 95%정도 사용합니다.
//물론 임의로 수정이 가능합니다.
$body->제목길이 = $cfg[subject_len]; //기본설정게 설정된 제목길이를변수 나중에 짜르기를 위해서 읽어옮니다.
$body->로그인회원아이디 = $login_mb[mb_id]; //설명이 필요없는 현재 로그인 아이디를 읽어들입니다.
if ($cfg[use_category]) {
$body->분류사용 = $cfg[use_category]; //config.inc.php에서 분류사용여부를 읽어들여 출력될 변수에 넘긴다.
$body->분류옵션 = get_category_option($table_category); //카다로그테이블에서 카다로그내용을 분류옵션으로 넘긴다.
}
$rows = $cfg[page_rows];
// 검색어가 있다면
if ($stext) {
$sql_search = get_sql_search($sselect, $stext);
// 원글만 얻는다
$sql = " select distinct bd_parent_id from $table where (1) $sql_search ";
$result = sql_query_error($sql);
$total_count = mysql_num_rows($result);
// 오늘 등록된 게시물 건수
$sql = " select distinct bd_parent_id from $table where (1) $sql_search and DATE_FORMAT(bd_datetime, '%Y-%m-%d') = CURDATE() ";
$result = sql_query_error($sql);
$today_count = mysql_num_rows($result);
} else {
$sql_search = "";
// 페이지 계산, 우선 전체열의 수를 얻고 게시판의 열의 수로 나누어서 전체페이지수를 얻는다
$sql = " select count(*) from $table where bd_comment = '0' ";
$row = sql_fetch_array($sql);
$total_count = $row[0];
// 오늘 등록된 게시물 건수
$sql = " select count(*) from $table where bd_comment = '0' and DATE_FORMAT(bd_datetime, '%Y-%m-%d') = CURDATE() ";
$row = sql_fetch_array($sql);
$today_count = $row[0];
}
$total_page = ceil($total_count / $rows); // 전체 페이지 계산
if ($page == "") { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함
$head->문서제목 = $body->문서제목 = $cfg[subject] . " 목록 : 페이지 $page";
$body->전체게시물건수 = $total_count;
$body->오늘게시물건수 = $today_count;
if ($stext) {
$sql = " select distinct bd_parent_id
from $table
where (1) $sql_search
order by bd_notice, bd_num, bd_reply
limit $from_record, $rows ";
$result = sql_query_error($sql);
$body->전체목록링크 = true;
} else {
$sql = " select *
from $table
where bd_comment = '0'
order by bd_notice, bd_num, bd_reply
limit $from_record, $rows ";
$result = sql_query_error($sql);
$body->전체목록링크 = false;
}
$body->글입력링크 = false;
if ($login_mb[mb_level] >= $cfg[write_level]) {
$body->글입력링크 = true;
}
$body->로그인링크 = null;
$body->로그아웃링크 = null; // 이부분 설명안하는 곳은 천천히 봐보세요!
$body->정보수정링크 = null; // 전체적으로 body라는 변수에 입력하죠!
$body->회원가입링크 = null;
$body->관리자링크 = null;
$body->암호분실링크 = null;
if ($login_mb[mb_id]) {
$body->로그아웃링크 = true;
$body->정보수정링크 = true;
// 관리자인가?
if ($login_mb[mb_level] >= $cfg[level_group_admin]) {
$body->관리자링크 = true;
}
} else {
if ($cfg[use_register]) {
$body->로그인링크 = true;
$body->회원가입링크 = true;
$body->암호분실링크 = true;
}
}
$head->title = "{$cfg[subject]} : 글 목록 [$page 페이지]";
$save_bd_num = $save_bd_notice = 0;
for ($i=0; $row=mysql_fetch_array($result); $i++) {
if ($stext) {
$data = sql_fetch_array(" select * from $table where bd_id = '$row[bd_parent_id]' and bd_comment = '0' ");
$bd_subject = cut_str($data[bd_subject], $cfg[subject_len], "…");
if (ereg("bd_subject", $sselect)) {
$bd_subject = set_search_font($stext, $bd_subject);
$bd_subject = get_text($bd_subject);
$bd_subject = get_search_font($bd_subject);
} else {
$bd_subject = get_text($bd_subject);
}
} else {
$data = $row;
$bd_subject = cut_str($data[bd_subject], $cfg[subject_len], "…");
$bd_subject = get_text($bd_subject);
}
unset($row);
$body->목록[$i]->답변 = null;
if (strlen($data[bd_reply]) > 0)
for ($k=0; $k<strlen($data[bd_reply]); $k++)
$body->목록[$i]->답변 .= " ";
$body->목록[$i]->제목 = $bd_subject;
$body->목록[$i]->회원 = false;
$body->목록[$i]->회원아이콘 = null;
if ($data[mb_id]) {
$mb = get_member($data[mb_id]);
$body->목록[$i]->회원아이콘 = $mb[mb_icon];
$body->목록[$i]->회원 = true;
}
if ($save_bd_num != $data[bd_num] || $save_bd_notice != $data[bd_notice])
$body->목록[$i]->번호 = $data[bd_num];
else
$body->목록[$i]->번호 = false;
$save_bd_num = $data[bd_num];
$save_bd_notice = $data[bd_notice];
$body->목록[$i]->분류 = get_category_name($table_category, $data[ca_id]);
$body->목록[$i]->아이디 = $data[bd_id];
$body->목록[$i]->공지사항 = ($data[bd_notice] == -1) ? true : false;
$body->목록[$i]->코멘트수 = $data[bd_commentcnt];
$body->목록[$i]->이름 = get_text($data[bd_name]);
$body->목록[$i]->일시 = $data[bd_datetime];
$body->목록[$i]->조회수 = $data[bd_hit];
$body->목록[$i]->테스트 = $data[bd_test]; // 이정도부분에다 추가를 해보죠
// $data[bd_test]는 어디서 왔을까요?
// 윗줄 $data = sql_fetch_array(" select * from $table where bd_id = '$row[bd_parent_id]' and bd_comment = '0' ");
// 여기서 왔답니다. 다시말해 자료를 $data라는 변수에 DB(mysql)에서 읽어와서 넣습니다. 그 변수값에
// $data[bd_id] $data[필드명]식으로 읽어들입니다.
// $data[ca_id]
// :
// 이런식으로 들어가있습니다. 이거를 $body->목록이라는 변수에 2차원변수에 집어 넣습니다.
// 이걸 printt($body, "$reldir/$cfg[dir_skin]/$cfg[skin]/gblist.ets");
// 이런씩으로 $body값전체를 넘기는거죠! 어디로 당연히 gblist.ets로 넘기는거겠죠!
// 스킨파일에서는 {조회수}이런씩으로 여기서 집어 넣은 변수값을
// gblist.ets에서 출력하는 기능을하게 됩니다.
// gbview,gbform다 마찬가지겠죠!
// 여기서는 만질게 없습니다.
// 넘 간단한것 갔죠!
$body->목록[$i]->파일아이콘 = false; // 이 false에 대해서 한가지 짚고 넘어가겠습니다.
// 이걸 사용하는건 gblist.ets에서 if문을 사용하지 못합니다.
// 정확하게 php사용이 제한되어있습니다.
// 그래서 다른방법을 사용합니다.(사실 정확한지는 모르겠습니다. 소스흐름이그래서)
// 여기서 true와, false값으로 구분하여 gblist.ets에서
// {var:파일아이콘} 실행부분 {/var:파일아이콘}이런씩으로해서
//만약 파일아이콘이 true이면 실행부분을 출력하게되는겁니다.
if ($data[bd_file1] || $data[bd_file2])
$body->목록[$i]->파일아이콘 = true;
$body->목록[$i]->링크아이콘 = false;
if ($data[bd_link1] || $data[bd_link2])
$body->목록[$i]->링크아이콘 = true;
$body->목록[$i]->새글아이콘 = false;
if ($data[bd_datetime] >= date("Y-m-d H:i:s", time() - ($cfg['new'] * 3600)))
$body->목록[$i]->새글아이콘 = true;
$body->목록[$i]->뜨거운아이콘 = false;
if ($data[bd_hit] >= $cfg[hot])
$body->목록[$i]->뜨거운아이콘 = true;
$body->목록[$i]->전투아이콘 = false;
if ($data[bd_commentcnt] >= $cfg[battle])
$body->목록[$i]->전투아이콘 = true;
$body->목록[$i]->비밀아이콘 = false;
if ($data[bd_secret])
$body->목록[$i]->비밀아이콘 = true;
if ($cfg[category])
$body->목록[$i]->분류 = $data[bd_category];
// 갤러리
$body->목록[$i]->이미지 = $data[bd_file1];
$body->목록[$i]->줄바꿈 = false;
if ($i > 0 && ($i % 5 == 0))
$body->목록[$i]->줄바꿈 = true;
$body->목록[$i]->파일디렉토리 = $cfg[dir_file];
}
$body->자료없음 = false;
if ($i == 0) {
$body->자료없음 = true;
}
$qstr = "gb_table{$uc2}$gb_table{$uc3}sselect{$uc2}$sselect{$uc3}stext{$uc2}$stext{$uc3}page{$uc2}";
$body->페이지 = $page;
$body->페이지목록 = get_paging($cfg[write_pages], $page, $total_page, $rows, "$absdir/gblist.php{$uc1}{$qstr}");
$head->절대경로 = $body->절대경로 = $tail->절대경로 = $absdir;
$head->상대경로 = $body->상대경로 = $tail->상대경로 = $reldir;
$head->스킨디렉토리 = $body->스킨디렉토리 = $tail->스킨디렉토리 = $cfg[dir_skin];
$head->스킨 = $body->스킨 = $tail->스킨 = $cfg[skin];
$head->uc1 = $body->uc1 = $tail->uc1 = $uc1;
$head->uc2 = $body->uc2 = $tail->uc2 = $uc2;
$head->uc3 = $body->uc3 = $tail->uc3 = $uc3;
if ($cfg[include_head]) require_once $cfg[include_head];
if ($cfg[content_head]) echo $cfg[content_head];
printt($head, "$reldir/$cfg[dir_skin]/$cfg[skin]/head.ets"); // 이부분에는 사실 style부분이 부분이라고 해도 과언이 아닙니다.
printt($body, "$reldir/$cfg[dir_skin]/$cfg[skin]/gblist.ets"); // 실제 화면에 출력되는부분이죠~
if ($cfg[content_tail]) echo $cfg[content_tail];
if ($cfg[include_tail]) require_once $cfg[include_tail];
$tail->종료시간 = get_microtime();
$tail->실행시간 = $tail->종료시간 - $tail->시작시간; // 이부분은 템플리트 수행속도를 측정하기위해 넣으신듯합니다.
// 물론 저희가 보면 안나오죠!
// tail.ets에서 {종료시간}, {실행시간}이걸 출력해주면 나옵니다.
// 제가 보기에도 다른 템플리트보다. 속도가 좀 늦은감은 있는듯합니다.
// 하지만 초보인분들이 보기는 편한듯하네요!
// 그리고 엄청난게 많은 게시물을 사용할게 아니라면 왠만한 사이트고
// 초보이시면 ets도 괜찮은듯싶습니다.
printt($tail, "$reldir/$cfg[dir_skin]/$cfg[skin]/tail.ets");
?>
이상 간단하게 적어보았습니다. 사실 이부분은 $body->목록[$i]->테스트 = $data[bd_test]; 이줄 추가해준게 전부 다 입니다.
이해안되시는부분은 즉각 리플을 달아주십시요!
다시 말씀드리지만 제가 초보입니다.
php다룬건 두달정도 밖에 안됩니다. 그런다고 정식적으로 다룬것도 아니고
그젼 프로그램을 해본게 있어서 문법, 함수등을 전혀모르는 상태에서 흐름만보고 수정하는겁니다.
(사실 그만큼의 시간이 없어서 지금공부중)
그렇기 때문에 조금아시는분들에게는 쓰레기 글입니다.
그러나 초보분들에게는 아주 쬐금은 도움이 되면 그나마 쓰레기는 면하리라는 생각에 글을 적습니다.
너무 욕하지 말아주시기를....
두번째로 gblist.ets에대해서 설명해드리겟습니다.
성격이 그래서 그런지 단어사용은 제가 부르고 싶은데로 부릅니다.
남이 알아 먹는다면 굳이 남들이 다 다르게 사용한다고해서 따라할필요는 없다는 생각에서 그렇습니다.
장문을 적는게 처음이라 대개 어색하네요 *^^*
추천
14
14
댓글 전체
감사합니다.