제로보드4는 공식적으로 더 이상 개발되지도 배포되지도 않습니다.
제로보드4를 사용하기 위한 팁보다 제로보드4를 안전하고 무사히 다른 툴로 이전하는 팁들을 게재해주시면 감사하겠습니다.
시간이 오래 지난 만큼 오래된 프로그램은 보안 및 사용성에 있어 문제가 많으니 이해 바랍니다.
※ 수정, 추가 되는 파일
bbs/view.php
bbs/comment.php <-- 새로 추가된 파일
bbs/comment_ok.php
bbs/del_comment_ok.php
bbs/skin/스킨폴더/view_comment.php
bbs/skin/스킨폴더/view_write_comment.php
bbs/skin/스킨폴더/error.php
bbs/skin/스킨폴더/ask_password.php
1. 필드추가
㉠ 디비 관리툴로 해당게시판 코멘트 테이블로 접근(zetyx_board_comment_해당게시판아이디)
㉡ 상단 "보기 구조 SQL...."에서 구조탭 클릭하고 아래처럼 필드 두개 추가하고 실행!
Add 2 field(s) * 테이블의 마지막 * 테이블의 처음 * ismember 다음에
㉢ 필드를 아래처럼 대충 설정하고 '저장'
필드 | replyno | replyst |
종류 | INT | char |
길이/값*1 | 11 | 26 |
㉣ 상단에 'SQL' 탭 클릭하고 질의 입력하는 곳에 아래처럼 입력하고 '실행'
필드 추가후, 이미 작성되어 있던 코멘트의 부모글번호, 깊이값 필드가 비어있기 때문에 거길 채워줘야함
update zetyx_board_comment_해당게시판아이디 set replyno=no;
update zetyx_board_comment_해당게시판아이디 set replyst='a';
㉤ 새로 생성할 게시판은 미리 필드를 포함해서 생성하도록 수정.
bbs/schema.sql 파일 286라인 ismember int(20) default 0 not null, 밑에다가
replyno int(11) not null,
replyst char(26),
를 추가
이제 새로 생성한 게시판은 ㉠㉡㉢㉣ 과정을 거치지 않아도 됨.
참고 : 아래 설명은 ㉠㉡㉢㉣ 까지 과정을 한번에 설정하는 방법입니다.
<?
include "_head.php";
$admin= @mysql_query("select * from {$admin_table}");
while($row=mysql_fetch_array($admin)) {
// 필드 추가하기
@mysql_query("alter table $t_comment"."_$row[name] add replyno int(11) not null");
@mysql_query("alter table $t_comment"."_$row[name] add replyst char(26)");
// 업데이트 하기
@mysql_query("update $t_comment"."_$row[name] set replyst='a'");
@mysql_query("update $t_comment"."_$row[name] set replyno='no'");
}
echo"필드추가와 업데이트가 올바르게 진행되었습니다.<br />파일이 필요없으면 삭제를 하세요.";
?>
위에 소스를 워드패드 같은 텍스트에디터를 사용을 해서 add_cmt.php 파일로 저장을 한 다음에 제로보드 폴더안으로 업로드 후
주소창에서 실행을 하면 ㉠㉡㉢ 까지 과정이 설정 됩니다..
예 : 웹브라우저 주소창에서 http://홈주소/제로보드 폴더명/add_cmt.php 실행
2. bbs/view.php 목록 출력부분 수정
// 코멘트 출력;;
if($setup[use_comment]) {
echo "<IFRAME id=\"iframe_comment".$no."\" src=\"comment.php?id=".$id."&no=".$no."\" name=\"iframe_comment".$no."\" marginWidth=\"0\" marginHeight=\"0\" frameBorder=\"0\" width=\"100%\" height=\"100%\" scrolling=\"no\"></IFRAME>";
}
목록 출력부분 괄호 안의 내용은 다 지우고, 아이프레임만 딸랑 넣으세요;
3. bbs/comment.php 첨부파일 받아 적절히 수정
㉠ 35, 40 라인에 페이지당 코멘트 갯수, 목록 갯수 설정
㉡ 수정, 답글 버튼 부근에 if ($depth >= '8' || ereg("z$",$replyst)){가 두군데 있는데,
답글의 답글... 계층 단계 수를 설정하는 부분 (기본 8로 되어있음 )
㉢ 삭제,수정,답글 버튼 부분을 보면 버튼링크의 클래스가 class=btn 로 되어있으니 참고.
텍스트가 아닌 이미지로 만들 경우, 별로 어려운 부분이 아니니 쉽게 할 수 있을 듯...
4. bbs/comment_ok.php 아래대로 수정
// 대상 파일 이름 정리
if(!$setup[use_alllist]) $view_file_link="view.php"; else $view_file_link="zboard.php";
위 내용을 아래처럼 수정
// 대상 파일 이름 정리
if(!$setup[use_alllist]) $view_file_link="comment.php"; else $view_file_link="comment.php";
// 회원등록이 되어 있을때 이름등을 가져옴;;
위 부분을 찾아서 바로 윗줄에 아래내용 삽입.
if($c_no) {
$s_data = mysql_fetch_array(mysql_query("select * from $t_comment"."_$id where no='$c_no'"));
}
// 코멘트 입력
mysql_query("insert into $t_comment"."_$id (parent,ismember,name,password,memo,reg_date,ip) values ('$parent','$member[no]','$name','$password','$memo','$reg_date','$REMOTE_ADDR')") or error(mysql_error());
위 내용을 아래처럼 수정
// 수정글일 경우
if($c_no) {
if(!$member[no]) {
if($password != $s_data[password]) {
Error("비밀번호가 맞지 않습니다.");
}
} else {
if($member[no]!=$s_data[ismember] && !$is_admin) {
Error("본인의 코멘트만 수정할 수 있습니다");
}
}
mysql_query("update $t_comment"."_$id set memo='$memo' where no='$c_no'") or error(mysql_error());
} else {
// 코멘트 입력
if($replyno){ //답글일 경우
mysql_query("insert into $t_comment"."_$id (parent,ismember,replyno,replyst,name,password,memo,reg_date,ip) values ('$parent','$member[no]','$replyno','$replyst','$name','$password','$memo','$reg_date','$REMOTE_ADDR')") or error(mysql_error());
} else{ //새글일 경우
mysql_query("insert into $t_comment"."_$id (parent,ismember,replyno,replyst,name,password,memo,reg_date,ip) values ('+
'+
'$parent','$member[no]','','a','$name','$password','$memo'+
','$reg_date','$REMOTE_ADDR')") or error(mysql_error());
$update_replyno=mysql_fetch_array(mysql_query("select max(no) from $t_comment"."_$id where parent='$no'"));// replyno 수정
mysql_query("update $t_comment"."_$id set replyno='$update_replyno[0]' where no='$update_replyno[0]'") or error(mysql_error());
}
}
// 회원일 경우 해당 해원의 점수 주기
@mysql_query("update $member_table set point2=point2+1 where no='$member[no]'",$connect) or error(mysql_error());
위 내용을 아래처럼 수정
// 회원일 경우 해당 해원의 점수 주기
if(!$c_no) {
@mysql_query("update $member_table set point2=point2+1 where no='$member[no]'",$connect) or error(mysql_error());
}
// 페이지 이동
movepage("$view_file_link?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no&category=$category");
위 내용을 아래처럼 수정
// 페이지 이동
movepage($view_file_link."?id=".$id."&no=".$no."&c_pagenum=".$c_pagenum);
5. bbs/del_comment_ok.php 삭제처리후 페이지 이동 수정
// 페이지 이동
if($setup[use_alllist]) movepage("zboard.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
else movepage("view.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
?>
위 내용을 찾아 아래처럼 수정
// 페이지 이동
//if($setup[use_alllist]) movepage("zboard.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
//else movepage("view.php?id=$id&page=$page&page_num=$page_num&select_arrange=$select_arrange&desc=$des&sn=$sn&ss=$ss&sc=$sc&keyword=$keyword&no=$no");
?>
<script>
parent.location.reload();
</script>
6. 스킨파일 view_comment.php 뼈대스킨
<div style="padding-left: <?=($depth-1)*20?>px;"> <!---계층 코멘트의 깊이. 깊이가 0, 20, 40, 60.. 늘어남.--->
<table border="1" cellspacing="1" width="100%">
<tr>
<td><?=$c_face_image?><?=$comment_name?></b></td>
<td align="right" class= btn id="com<?=$c_data[no]?>"><!---삭제 버튼 누르면 이 근처에 메시지창이 뜸---><?=$a_del?>DELETE </a><?=$a_edit?>EDIT </a><?=$a_reply?>REPLY </a> | <?=$c_number?><br><?=$show_ip?> | <?=date("Y.m.d H:i:s",$c_data[reg_date])?></td>
</tr>
<tr>
<td colspan="2" id="commentContent_<?=$c_data[no]?>"><?=str_replace("\n","<br>",$c_memo)?><!---수정 버튼 눌렀을때 이 안의 내용을 textarea로 복사---></td>
</tr>
<tr>
<td colspan="2" id="form_<?=$c_data[no]?>"><!---수정 답글 버튼 누르면 글쓰는 입력창이 이 td 안으로 들어옴---></td>
</tr>
</table>
</div>
- 참고사항
- 일반 덧글인지, 덧글의 덧글인지 꺾어진 화살표이미지 등으로 표시할때...
<?if($depth > 1){echo "<img src='".$dir."/images/reply.png'>";}?>
- 모두 적용후 테스트해 보고 코멘트 작성자 이름표시 방법이 그룹설정처럼 안될때 lib.php파일에
// 이름앞에 붙는 아이콘 정의;;
를 찾아서 보면 좀 아래에 두줄이 주석처리 되어있을 겁니다. 그걸 주석 해제해 보세요.
7. 스킨파일 view_write_comment.php 뼈대스킨
<table border="1" cellspacing="0" width="100%">
<tr height='30'>
<td>전체 코멘트 <strong><?=$c_total?></strong>개,<strong><?=$c_nowpage?></strong>/<?=$c_pagesu?>페이지</td>
<?
//if($c_total > $c_page){
$c_pagegroup=ceil(($c_pagenum+1)/$c_pageviewsu); //페이지 그룹결정
$c_pagestart=($c_pageviewsu*($c_pagegroup-1))+1; //시작페이지결정
$c_pageend=$c_pagestart+$c_pageviewsu-1; //종료페이지결정
if($c_pagegroup>1){
$c_prev=$c_pagestart-$c_pageviewsu-1;//이전목록그룹의 시작페이지결정
$c_prev2=$c_prev+$c_pageviewsu;
echo"<td width='30' align='center' onclick=\"location.href='comment.php?id=$id&no=$no&c_pagenum=$c_prev'\">".$c_prev2."...</td>";
}
//if($c_pagenum){
// $c_prevpage=$c_pagenum-1;
// echo"<td width='30'+
' align='center' onclick=\"location.href='comment.php?id=$id&no=$no&c_pagenum=$c_prevpage'\">◀</td>";
//}
for($i=$c_pagestart;$i<=$c_pageend;$i++){
if($c_pagesu<$i){break;}
$j=$i-1;
if($j==$c_pagenum){echo "<td width='30' align='center'><b>".$i."</b></div>";}
else{echo "<td width='30' align='center' onclick=\"location.href='comment.php?id=$id&no=$no&c_pagenum=$j'\">$i</td>";}
}
//if(($c_pagenum+1)!=$c_pagesu){
// $c_nextpage=$c_pagenum+1;
// echo"<td width='30' align='center' onclick=\"location.href='comment.php?id=$id&no=$no&c_pagenum=$c_nextpage'\">▶</td>";
//}
if($c_pageend<$c_pagesu){
$c_pageend2=$c_pageend + 1;
echo"<td width='+
'30' align='center' onclick=\"location.href='comment.php?id=$id&no=$no&c_pagenum=$c_pageend'\">...".$c_pageend2."</td>";
}
//}
?>
</tr>
</table>
<div id="form_0"> <!---수정, 답글 버튼 누르면 이동하는 div--->
<table border="1" cellspacing="1" width="100%">
<?if(!$member['no']){?>
<tr>
<td>이름 : <input type=text name=name maxlength=10 style="background-color: #E3F4FD;border: 1px solid #CDE7FC;font-family: 굴림;font-size: 9pt;color: #000000;height: 10px;width: 100px;padding: 3px;"> 비밀번호 : <input type=password name=password maxlength=20 style="background-color: #E3F4FD;border: 1px solid #CDE7FC;font-family: 굴림;font-size: 9pt;color: #000000;height: 10px;width: 100px;padding: 3px;"></td>
</tr>
<?}?>
<tr>
<td><textarea name=memo id=memo style="background-color: #E3F4FD;border: 1px solid #CDE7FC;width: 100%;height: 100px;"></textarea></td>
</tr>
<tr>
<td align="center"><input type=submit value='OK' accesskey="s" style="height: 30px;width: 100px;background-color: #CDE7FC;border: 1px solid #CDE7FC;"></td>
</tr>
</table>
</div>
8. style.css 삭제, 수정, 답글 버튼 관련
/* 삭제버튼 누르면 뜨는 창 위치, 스타일을 조정 */
.comment_del_div{position:absolute;z-index:99;top:-120px;right:10px;border:1px solid #000000;}
/* 코멘트 삭제,수정,답글 버튼 링크 스타일 */
.btn{font-family: tahoma; font-size:7pt;text-decoration:none; color:#cccccc}
a.btn:link {font-family: tahoma; font-size:7pt;text-decoration:none; color:#c00000}
a.btn:visited {font-family: tahoma; font-size:7pt;text-decoration:none; color:#c00000}
a.btn:active {font-family: tahoma; font-size:7pt;text-decoration:none; color:#c00000}
a.btn:hover {font-family: tahoma; font-size:7pt;text-decoration:none; color:#FFCACB}
9. 스킨의 error.php, ask_password.php
코멘트 삭제시 에러메세지 출력 또는 비밀번호를 묻는 경우에 뒤로가기 버튼은 필요없기 때문에 감춰주기.
<?if(!$del_ifm){?>뒤로가기버튼<?}?>
2009, 01.25 - bbs/comment_ok.php 수정할때 포인트 올라가는 부분 수정
미니커뮤니티
http://kwani82.dothome.co.kr/bbs/zboard.php?id=free
미니커뮤니티
저는 제대로 되게 수정 했는데요
굳이 테이블이나 컬럼 추가 안해도
페이징이든 뭐든 다 할 수 있습니다..
2. bbs/view.php 목록 출력부분 수정
// 내용보기 출력
$_skinTimeStart = getmicrotime();
include $dir."/view.php";
$_skinTime += getmicrotime()-$_skinTimeStart;
// 코멘트 출력;;
if($setup[use_comment]) {
echo "<IFRAME id=\"iframe_comment".$no."\" src=\"comment.php?id=".$id."&no=".$no."\" name=\"iframe_comment".$no."\" marginWidth=\"0\" marginHeight=\"0\" frameBorder=\"0\" width=\"100%\" height=\"100%\" scrolling=\"no\"></IFRAME>";
}
// 위, 아래글 출력, 코멘트, 버튼 출력
$_skinTimeStart = getmicrotime();
include $dir."/view_foot.php";
$_skinTime += getmicrotime()-$_skinTimeStart;
목록 뼈대스킨 부분 보충설명.
<div style="width: 100%; margin: 0 auto;">
<?if($depth > 1){?>
<div style="float: left;width: <?=($depth-1)*20?>px;"></div>
<div style="margin-left: <?=($depth-1)*20?>px;";>
<?}?>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
여기 테이블로다 코멘트를 꾸미시고...
</table>
<div style="width: 100%; display: none;" id="form_<?=$c_data[no]?>"></div>
<?if($depth > 1){?>
</div>
<?}?>
</div>
빨간색 부분은 하나의 댓글을 감사는 부분,
초록색은 계층댓글일때 왼쪽 여백을 주도록기위해 있는 겁니다. 일반 댓글일 경우 출력되지않는 부분.
보라색은 댓글 달때 글쓰는 창이 들어오는 부분.
파란색은 알아서 꾸미시면 됩니다.
그리고 제일 처음 DIV 스타일에 margin: 0 auto; 을 썼는데 이 DIV가 화면 수평가운데 위치하게 하기 위해서 있습니다.
이게 먹힐려면 body {width: 100%;} 바디의 너비가 100%일때 margin: 0 auto; 를 쓰면 화면 가운데 위치합니다.
그리고, comment.php 파일에
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
선언을 해 두었습니다. 필요 없거나 수정하실려면 확인하세요.
첨부된 파일은 아마도 <meta http-equiv=content-type content="text/html; charset=euc-kr"> 로 되어 있을겁니다.
이것도 자신에 맞게 수정.
설명을 너무 허접하게 해놔서 잘 안되는 분들이 많은 것 같아서...;;
자꾸 제 중심으로 생각해서 알아서들 잘 하겠지...라고 생각해 버립니다.;;
글 입력창 위치는 comment.php 파일에...
include $dir."/view_write_comment.php"; 이 입력하는 부분 출력하는 걸 여기 저기 옮겨 보세요.
단, </form> 윗쪽에 있어야 합니다.
그리고 정렬에 관해선...
$c_query="select * from $t_comment"."_$id where parent='$no' order by replyno desc, replyst asc limit $c_start,$c_page";
이 부분입니다.(asc 위에서 아래로 정렬, desc 밑에서 위로)
파란색은 안고쳐도 되고요, 빨간색 부분이 기본 역순(최신 글이 가장 위에)으로 되어있습니다.
이렇게 한 이유는 페이징 때문입니다.;;
한 페이지에 10개 출력하게 설정 되어있다면 글이 11개일때, 최근글이 보이는 페이지에 글이 딸랑 하나밖에 안보입니다.;;
이건 xe그렇게 되어있는 것 같더군요.;;; 어찌 할수 없는건지 제가 허접해서 그런지 몰라도 능력밖의 일이라 그냥 편하게 역정렬로 했습니다.
방문자가 적은 소규모 사이트라면 굳이 페이징이 필요 없기 때문에 한 페이지에 표시할 글 수를 999로 잡아놓고 위에서 아래로 정렬하는 것도 좋은 방법이 아닐까 생각 되네요.

http://nontoxic.hosting.paran.com/bbs/zboard.php?id=talkbox&no=20