제로보드 게시물 날짜 수정하기
페이지 정보
본문
게시물의 날짜를 임의로 수정하기 좋은 팁은 Whenji 님의 '임의의 게시물 날짜 변경하기' 입니다.
하지만, 전 새롭게 페이지를 열어서 게시판 이름과 번호를 써서 고치는 것 보다는
그냥 그 게시물을 수정할때, 임의로 고칠 수 있도록 만들고 싶어서 한번 만들어 봤습니다.
더 좋은 방법이 있으면 알려주세요..
1. 제로보드 root 폴더에 있는 write.php 를 수정합니다.
그 페이지를 열고 아래와 같은 부분을 찾습니다.
/******************************************************************************************
* 글쓰기 모드에 따른 내용 체크
*****************************************************************************************/
if($mode=="modify") {
// 비밀글이고 패스워드가 틀리고 관리자가 아니면 리턴
if($data[is_secret]&&!$is_admin&&$data[ismember]!=$member[no]&&$HTTP_COOKIE_VARS[zb_s_check]!=$setup[no]."_".$no) error("정상적인 방법으로 수정하세요");
$name=stripslashes($data[name]); // 이름
$email=stripslashes($data[email]); // 메일
$homepage=stripslashes($data[homepage]); // 홈페이지
$subject=$data[subject]=stripslashes($data[subject]); // 제목
$subject=str_replace(""",""",$subject);
$homepage=str_replace(""",""",$homepage);
$name=str_replace(""",""",$name);
$sitelink1=str_replace(""",""",$sitelink1);
$sitelink2=str_replace(""",""",$sitelink2);
$memo=stripslashes($data[memo]); // 내용
$sitelink1=$data[sitelink1]=stripslashes($data[sitelink1]);
$sitelink2=$data[sitelink2]=stripslashes($data[sitelink2]);
이 부분 바로 밑에 아래를 소스를 삽입합니다.
//임의날짜 수정 추가
$reg_date=$data[reg_date];
그러면 결과는 아래와 같이 되어야 합니다.
위에 생략....
/******************************************************************************************
* 글쓰기 모드에 따른 내용 체크
*****************************************************************************************/
if($mode=="modify") {
// 비밀글이고 패스워드가 틀리고 관리자가 아니면 리턴
if($data[is_secret]&&!$is_admin&&$data[ismember]!=$member[no]&&$HTTP_COOKIE_VARS[zb_s_check]!=$setup[no]."_".$no) error("정상적인 방법으로 수정하세요");
$name=stripslashes($data[name]); // 이름
$email=stripslashes($data[email]); // 메일
$homepage=stripslashes($data[homepage]); // 홈페이지
$subject=$data[subject]=stripslashes($data[subject]); // 제목
$subject=str_replace(""",""",$subject);
$homepage=str_replace(""",""",$homepage);
$name=str_replace(""",""",$name);
$sitelink1=str_replace(""",""",$sitelink1);
$sitelink2=str_replace(""",""",$sitelink2);
$memo=stripslashes($data[memo]); // 내용
$sitelink1=$data[sitelink1]=stripslashes($data[sitelink1]);
$sitelink2=$data[sitelink2]=stripslashes($data[sitelink2]);
//임의날짜 수정 추가
$reg_date=$data[reg_date];
if($data[file_name1])$file_name1="<br> ".$data[s_file_name1]."이 등록되어 있습니다. <input type=checkbox name=del_file1 value=1> 삭제";
if($data[file_name2])$file_name2="<br> ".$data[s_file_name2]."이 등록되어 있습니다. <input type=checkbox name=del_file2 value=1> 삭제";
이하 생략....
제로보드 폴더의 write.php 소스수정 끝.
2. 그 다음은 write_ok.php의 수정글일때의 부분만 수정합니다.
아래의 부분을 찾습니다.
/***************************************************************************
* 수정글일때
**************************************************************************/
if($mode=="modify"&&$no) {
if($s_data[ismember]) {
if(!$is_admin&&$member[level]>$setup[grant_delete]&&$s_data[ismember]!=$member[no]) Error("정상적인 방법으로 수정하세요");
}
// 비밀번호 검사;;
if($s_data[ismember]!=$member[no]&&!$is_admin) {
if($password!=$s_data[password]) Error("비밀번호가 틀렸습니다");
}
// 파일삭제
if($del_file1==1) {@z_unlink("./".$s_data[file_name1]);$del_que1=",file_name1='',s_file_name1=''";}
if($del_file2==1) {@z_unlink("./".$s_data[file_name2]);$del_que2=",file_name2='',s_file_name2=''";}
// 파일등록
if($file_name1) {$del_que1=",file_name1='$file_name1',s_file_name1='$s_file_name1'";}
if($file_name2) {$del_que2=",file_name2='$file_name2',s_file_name2='$s_file_name2'";}
여기 바로 밑에 아래의 소스를 추가합니다.
//임의 날짜 변환
if(!$year) {
$reg_date= $reg_date_old;}
else {
$t_time = mktime($hour, $min, $sec, $mon, $day, $year);
$reg_date=$t_time;}
또 그 아래에 좀 내려가시다 보면 수정할 곳이 또 있습니다.
@mysql_query("update $t_board"."_$id set headnum='$headnum',prev_no='$prev_no',next_no='$next_no',child='$child',depth='$depth',arrangenum='$arrangenum',father='$father',name='$name',email='$email',homepage='$homepage',reg_date='$reg_date',subject='$subject',memo='$memo',sitelink1='$sitelink1',sitelink2='$sitelink2',use_html='$use_html',reply_mail='$reply_mail',is_secret='$is_secret',category='$category' $del_que1 $del_que2 where no='$no'") or error(mysql_error());
이런 부분이 있는데, 수정글일때 부분의 이런 부분에 reg_date='$reg_date' 소스를 넣어줍니다.
그러니까..
수정글일때 부분에서 // 공지 -> 일반글, // 일반글 -> 공지, // 일반->일반, 공지->공지 일때, 이 세부분만 고쳐시면 됩니다.
그러면 아래의 소스와 같이 됩니다.
상위 생략...
/***************************************************************************
* 수정글일때
**************************************************************************/
if($mode=="modify"&&$no) {
if($s_data[ismember]) {
if(!$is_admin&&$member[level]>$setup[grant_delete]&&$s_data[ismember]!=$member[no]) Error("정상적인 방법으로 수정하세요");
}
// 비밀번호 검사;;
if($s_data[ismember]!=$member[no]&&!$is_admin) {
if($password!=$s_data[password]) Error("비밀번호가 틀렸습니다");
}
// 파일삭제
if($del_file1==1) {@z_unlink("./".$s_data[file_name1]);$del_que1=",file_name1='',s_file_name1=''";}
if($del_file2==1) {@z_unlink("./".$s_data[file_name2]);$del_que2=",file_name2='',s_file_name2=''";}
// 파일등록
if($file_name1) {$del_que1=",file_name1='$file_name1',s_file_name1='$s_file_name1'";}
if($file_name2) {$del_que2=",file_name2='$file_name2',s_file_name2='$s_file_name2'";}
//임의 날짜 변환
if(!$year) {
$reg_date= $reg_date_old;}
else {
$t_time = mktime($hour, $min, $sec, $mon, $day, $year);
$reg_date=$t_time;}
// 공지 -> 일반글
if(!$notice&&$s_data[headnum]<="-2000000000") {
$temp=mysql_fetch_array(mysql_query("select max(division) from $t_division"."_$id"));
$max_division=$temp[0];
$temp=mysql_fetch_array(mysql_query("select max(division) from $t_division"."_$id where num>0 and division!='$max_division'"));
if(!$temp[0]) $second_division=0; else $second_division=$temp[0];
// 헤드넘+1 한값을 가짐;;
$max_headnum=mysql_fetch_array(mysql_query("select min(headnum) from $t_board"."_$id where (division='$max_division' or division='$second_division') and headnum>-2000000000")); // 공지가 아닌 최소 headnum 구함
$headnum=$max_headnum[0]-1;
$next_data=mysql_fetch_array(mysql_query("select no,headnum,division from $t_board"."_$id where (division='$max_division' or division='$second_division') and headnum='$max_headnum[0]' and arrangenum='0'")); // 다음글을 구함;;
if(!$next_data[0]) $next_data[0]="0";
$next_no=$next_data[0];
if(!$next_data[division]) $division=1; else $division=$next_data[division];
$prev_data=mysql_fetch_array(mysql_query("select no from $t_board"."_$id where (division='$max_division' or division='$second_division') and headnum<'$headnum' and no!='$no' order by headnum desc limit 1")); // 이전글을 구함;;
if($prev_data[0]) $prev_no=$prev_data[0]; else $prev_no=0;
$child="0";
$depth="0";
$arrangenum="0";
$father="0";
minus_division($s_data[division]);
@mysql_query("update $t_board"."_$id set headnum='$headnum',prev_no='$prev_no',next_no='$next_no',child='$child',depth='$depth',arrangenum='$arrangenum',father='$father',name='$name',email='$email',homepage='$homepage',reg_date='$reg_date',subject='$subject',memo='$memo',sitelink1='$sitelink1',sitelink2='$sitelink2',use_html='$use_html',reply_mail='$reply_mail',is_secret='$is_secret',category='$category' $del_que1 $del_que2 where no='$no'") or error(mysql_error());
plus_division($division);
// 다음글의 이전글을 수정
if($next_no)mysql_query("update $t_board"."_$id set prev_no='$no' where division='$next_data[division]' and headnum='$next_data[headnum]'");
// 이전글의 다음글을 수정
if($prev_no)mysql_query("update $t_board"."_$id set next_no='$no' where no='$prev_no'");
mysql_query("update $t_board"."_$id set prev_no=0 where (division='$max_division' or division='$second_division') and prev_no='$s_data[no]' and headnum!='$next_data[headnum]'");
mysql_query("update $t_category"."_$id set num=num-1 where no='$s_data[category]'",$connect);
mysql_query("update $t_category"."_$id set num=num+1 where no='$category'",$connect);
}
// 일반글 -> 공지
elseif($notice&&$s_data[headnum]>-2000000000) {
$temp=mysql_fetch_array(mysql_query("select max(division) from $t_division"."_$id"));
$max_division=$temp[0];
$temp=mysql_fetch_array(mysql_query("select max(division) from $t_division"."_$id where num>0 and division!='$max_division'"));
if(!$temp[0]) $second_division=0; else $second_division=$temp[0];
$max_headnum=mysql_fetch_array(mysql_query("select min(headnum) from $t_board"."_$id where division='$max_division' or division='$second_division'")); // 최고글을 구함;;
$headnum=$max_headnum[0]-1;
if($headnum>-2000000000) $headnum=-2000000000; // 최고 headnum이 공지가 아니면 현재 글에 공지를 넣음;
$next_data=mysql_fetch_array(mysql_query("select no,headnum,division from $t_board"."_$id where (division='$max_division' or division='$second_division') and headnum='$max_headnum[0]' and arrangenum='0'"));
if(!$next_data[0]) $next_data[0]="0";
$next_no=$next_data[0];
$prev_no=0;
$child="0";
$depth="0";
$arrangenum="0";
$father="0";
minus_division($s_data[division]);
$division=add_division();
@mysql_query("update $t_board"."_$id set division='$division',headnum='$headnum',prev_no='$prev_no',next_no='$next_no',child='$child',depth='$depth',arrangenum='$arrangenum',father='$father',name='$name',email='$email',homepage='$homepage',reg_date='$reg_date',subject='$subject',memo='$memo',sitelink1='$sitelink1',sitelink2='$sitelink2',use_html='$use_html',reply_mail='$reply_mail',is_secret='$is_secret',category='$category' $del_que1 $del_que2 where no='$no'") or error(mysql_error());
if($s_data[father]) mysql_query("update $t_board"."_$id set child='$s_data[child]' where no='$s_data[father]'"); // 답글이었으면 원본글의 답글을 현재글의 답글로 대체
if($s_data[child]) mysql_query("update $t_board"."_$id set depth=depth-1,father='$s_data[father]' where no='$s_data[child]'"); // 답글이 있으면 현재글의 위치로;;
// 원래 다음글로 이글을 가지고 있었던 데이타의 prev_no을 바꿈;
$temp=mysql_fetch_array(mysql_query("select max(headnum) from $t_board"."_$id where headnum<='$s_data[headnum]'"));
$temp=mysql_fetch_array(mysql_query("select no from $t_board"."_$id where headnum='$temp[0]' and depth='0'"));
mysql_query("update $t_board"."_$id set prev_no='$temp[no]' where prev_no='$s_data[no]'");
mysql_query("update $t_board"."_$id set next_no='$s_data[next_no]' where next_no='$s_data[no]'");
mysql_query("update $t_board"."_$id set prev_no='$no' where prev_no='0' and no!='$no'") or error(mysql_error()); // 다음글의 이전글을 설정
mysql_query("update $t_category"."_$id set num=num-1 where no='$s_data[category]'",$connect);
mysql_query("update $t_category"."_$id set num=num+1 where no='$category'",$connect);
// 일반->일반, 공지->공지 일때
} else {
@mysql_query("update $t_board"."_$id set name='$name',subject='$subject',email='$email',homepage='$homepage',reg_date='$reg_date',memo='$memo',sitelink1='$sitelink1',sitelink2='$sitelink2',use_html='$use_html',reply_mail='$reply_mail',is_secret='$is_secret',category='$category' $del_que1 $del_que2 where no='$no'") or error(mysql_error());
mysql_query("update $t_category"."_$id set num=num-1 where no='$s_data[category]'",$connect);
mysql_query("update $t_category"."_$id set num=num+1 where no='$category'",$connect);
}
아래 생략....
3. 그 다음 마지막으로 제로보드를 설치한 폴더에서 skin 폴더에 들어가셔서 "모든" 게시판 스킨의 폴더에 들어가 write.php 소스에 아래의 소스를 넣어주시면 됩니다.
물론 그 스킨파일의 html 소스에 맞게 고쳐서 넣어주셔야 올바른 모양으로 나오게 됩니다. 처음 소스의 해석은 회원 레벨 5 이하나 즉, 4부터 그리고 운영자에게 보여지는 화면이고
다음 화면은 회원레벨 5이상이나 비회원에게 보여지는 화면입니다.
<!--- 날짜 수정 시작 ----->
<? if($member[level]< 5 && $is_admin) { ?>
<!--- 회원 날짜 임의 수정 시작-------->
<input type=hidden name='reg_date_old' value=<?=$reg_date ?>>
<tr><td colspan=2><img src=images/t.gif width=1 height=3></td></tr>
<tr>
<td class=daerew_8>날짜수정 </td>
<td class=daerew_8 style='padding-right:20'><input type="text" name="year" size="6" maxlength=4 class=input> 년 <input type="text" name="mon" size="4" maxlength=2 class=input> 월 <input type="text" name="day" size="4" maxlength=2 class=input> 일 (수정 안할시에는 그냥 놔두세요.)
<input type="hidden" name="hour" size="2" value="0">
<input type="hidden" name="min" size="2" value="0">
<input type="hidden" name="sec" size="2" value="0">
</td>
</tr>
<!--- 회원 날짜 임의 수정 끝 -------->
<? } ?>
<? if($member[level] > 5 ) { ?>
<!--- 권한 밖의 회원의 날짜 임의 수정 시작-------->
<input type=hidden name='reg_date_old' value=<?=$reg_date ?>>
<input type="hidden" name="year" value="">
<input type="hidden" name="mon" value="">
<input type="hidden" name="day" value="">
<input type="hidden" name="hour" size="2" value="0">
<input type="hidden" name="min" size="2" value="0">
<input type="hidden" name="sec" size="2" value="0">
<!--- 권한 밖의 회원의 날짜 임의 수정 끝 -------->
<? } ?>
<!--- 날짜 수정 끝 ----->
소스를 삽입하면 아래와 같이 됩니다.
상위 생략...
<tr>
<td align=right class=listnum width=80><img src=images/t.gif border=0 width=80 height=1><br><b>* </b></td>
<td>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><?=$category_kind?></td>
<td><?=$hide_notice_start?> <input type=checkbox name=notice <?=$notice?> value=1></td><td class=neotune-upload> 공지사항 <?=$hide_notice_end?></td>
<td><?=$hide_html_start?> <input type=checkbox name=use_html <?=$use_html?> value=1></td><td class=neotune-upload> HTML <?=$hide_html_end?></td>
<td><?=$hide_secret_start?><input type=checkbox name=is_secret <?=$secret?> value=1></td><td class=neotune-upload>비공개글 <?=$hide_secret_end?></td>
<td><input type=checkbox name=reply_mail <?=$reply_mail?> value=1></td><td class=neotune-upload> 답변메일 받기 </td>
</tr>
</table>
</td>
</tr>
<? if($member[level]< 5 && $is_admin) { ?>
<!--- 날짜 임의 수정 시작-------->
<input type=hidden name='reg_date_old' value=<?=$reg_date ?>>
<tr>
<td align=right class=listnum width=80><img src=images/t.gif border=0 width=80 height=1><br>날짜수정 </td>
<td>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><input type="text" name="year" size="6" maxlength=4 class=input> 년 <input type="text" name="mon" size="4" maxlength=2 class=input> 월 <input type="text" name="day" size="4" maxlength=2 class=input> 일 (수정 안할시에는 그냥 놔두세요.)
<input type="hidden" name="hour" size="2" value="0">
<input type="hidden" name="min" size="2" value="0">
<input type="hidden" name="sec" size="2" value="0">
</td>
</tr>
</table>
</td>
</tr>
<!--- 날짜 임의 수정 끝 -------->
<? } ?>
<tr><td bgcolor=#ffffff height=1 colspan=2><img src=images/t.gif height=1></td></tr>
<tr>
<td align=right class=neotune-write><b>Subject </b></td>
<td> <input type=text name=subject value="<?=$subject?>" <?=size(60)?> maxlength=200 class=input> </td>
</tr>
<tr><td bgcolor=#ffffff height=1 colspan=2><img src=images/t.gif height=1></td></tr>
<tr>
<td align=right class=neotune-write><b>Contents </b></td>
<td valign=top>
<textarea name=memo <?=size2(80)?> rows=18 class=input><?=$memo?></textarea>
</td>
</tr>
아래 생략...
p.s. 이전에 소스를 올려놓고서 제가 관리를 못해서 죄송합니다. 이 소스대로 정확히 하신다면 틀림없이 될 것입니다.
1.새글을 작성하면 제로보드의 root 폴더인 bbs 폴더의 write.php의 파일소스 로직대로 그 새글 작성시간이 $reg_date로 database field에 저장이 됩니다.
2. 새글의 날짜를 수정하거나 수정안한다면 수정한 날짜를 $reg_date에 넣어줘야 하며, 수정안한다면 이전의 시간이 그대로 다시 입력되어야 할 것입니다.
그래서 게시판 스킨 폴더의 write.php에 삽입되는 소소를 보면
<!--- 날짜 임의 수정 시작-------->
<input type=hidden name='reg_date_old' value=<?=$reg_date ?>>
이 부분이 있는데, 이것의 의미는 이미 새글 입력시 입력된 $reg_date값을 $reg_date_old에 넣어준다는 의미입니다.
그래서 날짜 수정하거나 안하거나 한 값이 제로보드의 root 폴더인 bbs 폴더의 write_ok.php의 문서에 전달이 됩니다.
제로보드의 root 폴더인 bbs 폴더의 write_ok.php의 문서는 아래와 같은 소스가 삽입이 되어있는데...
//임의 날짜 변환
if(!$year) {
$reg_date= $reg_date_old;}
else {
$t_time = mktime($hour, $min, $sec, $mon, $day, $year);
$reg_date=$t_time;}
만약 수정할때, 게시판 날짜를 수정안했으면 예전의 날짜가 그대로 다시 $reg_date에 저장이 되고, 수정을 했으면, 수정한 값이 $reg_date로 새롭게 저장이 됩니다.
그리하여, 그 값을 다시 database의 field에 다시 넣어주게 되는 것입니다.
작성자 : Neoyoung
http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&no=5649
하지만, 전 새롭게 페이지를 열어서 게시판 이름과 번호를 써서 고치는 것 보다는
그냥 그 게시물을 수정할때, 임의로 고칠 수 있도록 만들고 싶어서 한번 만들어 봤습니다.
더 좋은 방법이 있으면 알려주세요..
1. 제로보드 root 폴더에 있는 write.php 를 수정합니다.
그 페이지를 열고 아래와 같은 부분을 찾습니다.
/******************************************************************************************
* 글쓰기 모드에 따른 내용 체크
*****************************************************************************************/
if($mode=="modify") {
// 비밀글이고 패스워드가 틀리고 관리자가 아니면 리턴
if($data[is_secret]&&!$is_admin&&$data[ismember]!=$member[no]&&$HTTP_COOKIE_VARS[zb_s_check]!=$setup[no]."_".$no) error("정상적인 방법으로 수정하세요");
$name=stripslashes($data[name]); // 이름
$email=stripslashes($data[email]); // 메일
$homepage=stripslashes($data[homepage]); // 홈페이지
$subject=$data[subject]=stripslashes($data[subject]); // 제목
$subject=str_replace(""",""",$subject);
$homepage=str_replace(""",""",$homepage);
$name=str_replace(""",""",$name);
$sitelink1=str_replace(""",""",$sitelink1);
$sitelink2=str_replace(""",""",$sitelink2);
$memo=stripslashes($data[memo]); // 내용
$sitelink1=$data[sitelink1]=stripslashes($data[sitelink1]);
$sitelink2=$data[sitelink2]=stripslashes($data[sitelink2]);
이 부분 바로 밑에 아래를 소스를 삽입합니다.
//임의날짜 수정 추가
$reg_date=$data[reg_date];
그러면 결과는 아래와 같이 되어야 합니다.
위에 생략....
/******************************************************************************************
* 글쓰기 모드에 따른 내용 체크
*****************************************************************************************/
if($mode=="modify") {
// 비밀글이고 패스워드가 틀리고 관리자가 아니면 리턴
if($data[is_secret]&&!$is_admin&&$data[ismember]!=$member[no]&&$HTTP_COOKIE_VARS[zb_s_check]!=$setup[no]."_".$no) error("정상적인 방법으로 수정하세요");
$name=stripslashes($data[name]); // 이름
$email=stripslashes($data[email]); // 메일
$homepage=stripslashes($data[homepage]); // 홈페이지
$subject=$data[subject]=stripslashes($data[subject]); // 제목
$subject=str_replace(""",""",$subject);
$homepage=str_replace(""",""",$homepage);
$name=str_replace(""",""",$name);
$sitelink1=str_replace(""",""",$sitelink1);
$sitelink2=str_replace(""",""",$sitelink2);
$memo=stripslashes($data[memo]); // 내용
$sitelink1=$data[sitelink1]=stripslashes($data[sitelink1]);
$sitelink2=$data[sitelink2]=stripslashes($data[sitelink2]);
//임의날짜 수정 추가
$reg_date=$data[reg_date];
if($data[file_name1])$file_name1="<br> ".$data[s_file_name1]."이 등록되어 있습니다. <input type=checkbox name=del_file1 value=1> 삭제";
if($data[file_name2])$file_name2="<br> ".$data[s_file_name2]."이 등록되어 있습니다. <input type=checkbox name=del_file2 value=1> 삭제";
이하 생략....
제로보드 폴더의 write.php 소스수정 끝.
2. 그 다음은 write_ok.php의 수정글일때의 부분만 수정합니다.
아래의 부분을 찾습니다.
/***************************************************************************
* 수정글일때
**************************************************************************/
if($mode=="modify"&&$no) {
if($s_data[ismember]) {
if(!$is_admin&&$member[level]>$setup[grant_delete]&&$s_data[ismember]!=$member[no]) Error("정상적인 방법으로 수정하세요");
}
// 비밀번호 검사;;
if($s_data[ismember]!=$member[no]&&!$is_admin) {
if($password!=$s_data[password]) Error("비밀번호가 틀렸습니다");
}
// 파일삭제
if($del_file1==1) {@z_unlink("./".$s_data[file_name1]);$del_que1=",file_name1='',s_file_name1=''";}
if($del_file2==1) {@z_unlink("./".$s_data[file_name2]);$del_que2=",file_name2='',s_file_name2=''";}
// 파일등록
if($file_name1) {$del_que1=",file_name1='$file_name1',s_file_name1='$s_file_name1'";}
if($file_name2) {$del_que2=",file_name2='$file_name2',s_file_name2='$s_file_name2'";}
여기 바로 밑에 아래의 소스를 추가합니다.
//임의 날짜 변환
if(!$year) {
$reg_date= $reg_date_old;}
else {
$t_time = mktime($hour, $min, $sec, $mon, $day, $year);
$reg_date=$t_time;}
또 그 아래에 좀 내려가시다 보면 수정할 곳이 또 있습니다.
@mysql_query("update $t_board"."_$id set headnum='$headnum',prev_no='$prev_no',next_no='$next_no',child='$child',depth='$depth',arrangenum='$arrangenum',father='$father',name='$name',email='$email',homepage='$homepage',reg_date='$reg_date',subject='$subject',memo='$memo',sitelink1='$sitelink1',sitelink2='$sitelink2',use_html='$use_html',reply_mail='$reply_mail',is_secret='$is_secret',category='$category' $del_que1 $del_que2 where no='$no'") or error(mysql_error());
이런 부분이 있는데, 수정글일때 부분의 이런 부분에 reg_date='$reg_date' 소스를 넣어줍니다.
그러니까..
수정글일때 부분에서 // 공지 -> 일반글, // 일반글 -> 공지, // 일반->일반, 공지->공지 일때, 이 세부분만 고쳐시면 됩니다.
그러면 아래의 소스와 같이 됩니다.
상위 생략...
/***************************************************************************
* 수정글일때
**************************************************************************/
if($mode=="modify"&&$no) {
if($s_data[ismember]) {
if(!$is_admin&&$member[level]>$setup[grant_delete]&&$s_data[ismember]!=$member[no]) Error("정상적인 방법으로 수정하세요");
}
// 비밀번호 검사;;
if($s_data[ismember]!=$member[no]&&!$is_admin) {
if($password!=$s_data[password]) Error("비밀번호가 틀렸습니다");
}
// 파일삭제
if($del_file1==1) {@z_unlink("./".$s_data[file_name1]);$del_que1=",file_name1='',s_file_name1=''";}
if($del_file2==1) {@z_unlink("./".$s_data[file_name2]);$del_que2=",file_name2='',s_file_name2=''";}
// 파일등록
if($file_name1) {$del_que1=",file_name1='$file_name1',s_file_name1='$s_file_name1'";}
if($file_name2) {$del_que2=",file_name2='$file_name2',s_file_name2='$s_file_name2'";}
//임의 날짜 변환
if(!$year) {
$reg_date= $reg_date_old;}
else {
$t_time = mktime($hour, $min, $sec, $mon, $day, $year);
$reg_date=$t_time;}
// 공지 -> 일반글
if(!$notice&&$s_data[headnum]<="-2000000000") {
$temp=mysql_fetch_array(mysql_query("select max(division) from $t_division"."_$id"));
$max_division=$temp[0];
$temp=mysql_fetch_array(mysql_query("select max(division) from $t_division"."_$id where num>0 and division!='$max_division'"));
if(!$temp[0]) $second_division=0; else $second_division=$temp[0];
// 헤드넘+1 한값을 가짐;;
$max_headnum=mysql_fetch_array(mysql_query("select min(headnum) from $t_board"."_$id where (division='$max_division' or division='$second_division') and headnum>-2000000000")); // 공지가 아닌 최소 headnum 구함
$headnum=$max_headnum[0]-1;
$next_data=mysql_fetch_array(mysql_query("select no,headnum,division from $t_board"."_$id where (division='$max_division' or division='$second_division') and headnum='$max_headnum[0]' and arrangenum='0'")); // 다음글을 구함;;
if(!$next_data[0]) $next_data[0]="0";
$next_no=$next_data[0];
if(!$next_data[division]) $division=1; else $division=$next_data[division];
$prev_data=mysql_fetch_array(mysql_query("select no from $t_board"."_$id where (division='$max_division' or division='$second_division') and headnum<'$headnum' and no!='$no' order by headnum desc limit 1")); // 이전글을 구함;;
if($prev_data[0]) $prev_no=$prev_data[0]; else $prev_no=0;
$child="0";
$depth="0";
$arrangenum="0";
$father="0";
minus_division($s_data[division]);
@mysql_query("update $t_board"."_$id set headnum='$headnum',prev_no='$prev_no',next_no='$next_no',child='$child',depth='$depth',arrangenum='$arrangenum',father='$father',name='$name',email='$email',homepage='$homepage',reg_date='$reg_date',subject='$subject',memo='$memo',sitelink1='$sitelink1',sitelink2='$sitelink2',use_html='$use_html',reply_mail='$reply_mail',is_secret='$is_secret',category='$category' $del_que1 $del_que2 where no='$no'") or error(mysql_error());
plus_division($division);
// 다음글의 이전글을 수정
if($next_no)mysql_query("update $t_board"."_$id set prev_no='$no' where division='$next_data[division]' and headnum='$next_data[headnum]'");
// 이전글의 다음글을 수정
if($prev_no)mysql_query("update $t_board"."_$id set next_no='$no' where no='$prev_no'");
mysql_query("update $t_board"."_$id set prev_no=0 where (division='$max_division' or division='$second_division') and prev_no='$s_data[no]' and headnum!='$next_data[headnum]'");
mysql_query("update $t_category"."_$id set num=num-1 where no='$s_data[category]'",$connect);
mysql_query("update $t_category"."_$id set num=num+1 where no='$category'",$connect);
}
// 일반글 -> 공지
elseif($notice&&$s_data[headnum]>-2000000000) {
$temp=mysql_fetch_array(mysql_query("select max(division) from $t_division"."_$id"));
$max_division=$temp[0];
$temp=mysql_fetch_array(mysql_query("select max(division) from $t_division"."_$id where num>0 and division!='$max_division'"));
if(!$temp[0]) $second_division=0; else $second_division=$temp[0];
$max_headnum=mysql_fetch_array(mysql_query("select min(headnum) from $t_board"."_$id where division='$max_division' or division='$second_division'")); // 최고글을 구함;;
$headnum=$max_headnum[0]-1;
if($headnum>-2000000000) $headnum=-2000000000; // 최고 headnum이 공지가 아니면 현재 글에 공지를 넣음;
$next_data=mysql_fetch_array(mysql_query("select no,headnum,division from $t_board"."_$id where (division='$max_division' or division='$second_division') and headnum='$max_headnum[0]' and arrangenum='0'"));
if(!$next_data[0]) $next_data[0]="0";
$next_no=$next_data[0];
$prev_no=0;
$child="0";
$depth="0";
$arrangenum="0";
$father="0";
minus_division($s_data[division]);
$division=add_division();
@mysql_query("update $t_board"."_$id set division='$division',headnum='$headnum',prev_no='$prev_no',next_no='$next_no',child='$child',depth='$depth',arrangenum='$arrangenum',father='$father',name='$name',email='$email',homepage='$homepage',reg_date='$reg_date',subject='$subject',memo='$memo',sitelink1='$sitelink1',sitelink2='$sitelink2',use_html='$use_html',reply_mail='$reply_mail',is_secret='$is_secret',category='$category' $del_que1 $del_que2 where no='$no'") or error(mysql_error());
if($s_data[father]) mysql_query("update $t_board"."_$id set child='$s_data[child]' where no='$s_data[father]'"); // 답글이었으면 원본글의 답글을 현재글의 답글로 대체
if($s_data[child]) mysql_query("update $t_board"."_$id set depth=depth-1,father='$s_data[father]' where no='$s_data[child]'"); // 답글이 있으면 현재글의 위치로;;
// 원래 다음글로 이글을 가지고 있었던 데이타의 prev_no을 바꿈;
$temp=mysql_fetch_array(mysql_query("select max(headnum) from $t_board"."_$id where headnum<='$s_data[headnum]'"));
$temp=mysql_fetch_array(mysql_query("select no from $t_board"."_$id where headnum='$temp[0]' and depth='0'"));
mysql_query("update $t_board"."_$id set prev_no='$temp[no]' where prev_no='$s_data[no]'");
mysql_query("update $t_board"."_$id set next_no='$s_data[next_no]' where next_no='$s_data[no]'");
mysql_query("update $t_board"."_$id set prev_no='$no' where prev_no='0' and no!='$no'") or error(mysql_error()); // 다음글의 이전글을 설정
mysql_query("update $t_category"."_$id set num=num-1 where no='$s_data[category]'",$connect);
mysql_query("update $t_category"."_$id set num=num+1 where no='$category'",$connect);
// 일반->일반, 공지->공지 일때
} else {
@mysql_query("update $t_board"."_$id set name='$name',subject='$subject',email='$email',homepage='$homepage',reg_date='$reg_date',memo='$memo',sitelink1='$sitelink1',sitelink2='$sitelink2',use_html='$use_html',reply_mail='$reply_mail',is_secret='$is_secret',category='$category' $del_que1 $del_que2 where no='$no'") or error(mysql_error());
mysql_query("update $t_category"."_$id set num=num-1 where no='$s_data[category]'",$connect);
mysql_query("update $t_category"."_$id set num=num+1 where no='$category'",$connect);
}
아래 생략....
3. 그 다음 마지막으로 제로보드를 설치한 폴더에서 skin 폴더에 들어가셔서 "모든" 게시판 스킨의 폴더에 들어가 write.php 소스에 아래의 소스를 넣어주시면 됩니다.
물론 그 스킨파일의 html 소스에 맞게 고쳐서 넣어주셔야 올바른 모양으로 나오게 됩니다. 처음 소스의 해석은 회원 레벨 5 이하나 즉, 4부터 그리고 운영자에게 보여지는 화면이고
다음 화면은 회원레벨 5이상이나 비회원에게 보여지는 화면입니다.
<!--- 날짜 수정 시작 ----->
<? if($member[level]< 5 && $is_admin) { ?>
<!--- 회원 날짜 임의 수정 시작-------->
<input type=hidden name='reg_date_old' value=<?=$reg_date ?>>
<tr><td colspan=2><img src=images/t.gif width=1 height=3></td></tr>
<tr>
<td class=daerew_8>날짜수정 </td>
<td class=daerew_8 style='padding-right:20'><input type="text" name="year" size="6" maxlength=4 class=input> 년 <input type="text" name="mon" size="4" maxlength=2 class=input> 월 <input type="text" name="day" size="4" maxlength=2 class=input> 일 (수정 안할시에는 그냥 놔두세요.)
<input type="hidden" name="hour" size="2" value="0">
<input type="hidden" name="min" size="2" value="0">
<input type="hidden" name="sec" size="2" value="0">
</td>
</tr>
<!--- 회원 날짜 임의 수정 끝 -------->
<? } ?>
<? if($member[level] > 5 ) { ?>
<!--- 권한 밖의 회원의 날짜 임의 수정 시작-------->
<input type=hidden name='reg_date_old' value=<?=$reg_date ?>>
<input type="hidden" name="year" value="">
<input type="hidden" name="mon" value="">
<input type="hidden" name="day" value="">
<input type="hidden" name="hour" size="2" value="0">
<input type="hidden" name="min" size="2" value="0">
<input type="hidden" name="sec" size="2" value="0">
<!--- 권한 밖의 회원의 날짜 임의 수정 끝 -------->
<? } ?>
<!--- 날짜 수정 끝 ----->
소스를 삽입하면 아래와 같이 됩니다.
상위 생략...
<tr>
<td align=right class=listnum width=80><img src=images/t.gif border=0 width=80 height=1><br><b>* </b></td>
<td>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><?=$category_kind?></td>
<td><?=$hide_notice_start?> <input type=checkbox name=notice <?=$notice?> value=1></td><td class=neotune-upload> 공지사항 <?=$hide_notice_end?></td>
<td><?=$hide_html_start?> <input type=checkbox name=use_html <?=$use_html?> value=1></td><td class=neotune-upload> HTML <?=$hide_html_end?></td>
<td><?=$hide_secret_start?><input type=checkbox name=is_secret <?=$secret?> value=1></td><td class=neotune-upload>비공개글 <?=$hide_secret_end?></td>
<td><input type=checkbox name=reply_mail <?=$reply_mail?> value=1></td><td class=neotune-upload> 답변메일 받기 </td>
</tr>
</table>
</td>
</tr>
<? if($member[level]< 5 && $is_admin) { ?>
<!--- 날짜 임의 수정 시작-------->
<input type=hidden name='reg_date_old' value=<?=$reg_date ?>>
<tr>
<td align=right class=listnum width=80><img src=images/t.gif border=0 width=80 height=1><br>날짜수정 </td>
<td>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td><input type="text" name="year" size="6" maxlength=4 class=input> 년 <input type="text" name="mon" size="4" maxlength=2 class=input> 월 <input type="text" name="day" size="4" maxlength=2 class=input> 일 (수정 안할시에는 그냥 놔두세요.)
<input type="hidden" name="hour" size="2" value="0">
<input type="hidden" name="min" size="2" value="0">
<input type="hidden" name="sec" size="2" value="0">
</td>
</tr>
</table>
</td>
</tr>
<!--- 날짜 임의 수정 끝 -------->
<? } ?>
<tr><td bgcolor=#ffffff height=1 colspan=2><img src=images/t.gif height=1></td></tr>
<tr>
<td align=right class=neotune-write><b>Subject </b></td>
<td> <input type=text name=subject value="<?=$subject?>" <?=size(60)?> maxlength=200 class=input> </td>
</tr>
<tr><td bgcolor=#ffffff height=1 colspan=2><img src=images/t.gif height=1></td></tr>
<tr>
<td align=right class=neotune-write><b>Contents </b></td>
<td valign=top>
<textarea name=memo <?=size2(80)?> rows=18 class=input><?=$memo?></textarea>
</td>
</tr>
아래 생략...
p.s. 이전에 소스를 올려놓고서 제가 관리를 못해서 죄송합니다. 이 소스대로 정확히 하신다면 틀림없이 될 것입니다.
1.새글을 작성하면 제로보드의 root 폴더인 bbs 폴더의 write.php의 파일소스 로직대로 그 새글 작성시간이 $reg_date로 database field에 저장이 됩니다.
2. 새글의 날짜를 수정하거나 수정안한다면 수정한 날짜를 $reg_date에 넣어줘야 하며, 수정안한다면 이전의 시간이 그대로 다시 입력되어야 할 것입니다.
그래서 게시판 스킨 폴더의 write.php에 삽입되는 소소를 보면
<!--- 날짜 임의 수정 시작-------->
<input type=hidden name='reg_date_old' value=<?=$reg_date ?>>
이 부분이 있는데, 이것의 의미는 이미 새글 입력시 입력된 $reg_date값을 $reg_date_old에 넣어준다는 의미입니다.
그래서 날짜 수정하거나 안하거나 한 값이 제로보드의 root 폴더인 bbs 폴더의 write_ok.php의 문서에 전달이 됩니다.
제로보드의 root 폴더인 bbs 폴더의 write_ok.php의 문서는 아래와 같은 소스가 삽입이 되어있는데...
//임의 날짜 변환
if(!$year) {
$reg_date= $reg_date_old;}
else {
$t_time = mktime($hour, $min, $sec, $mon, $day, $year);
$reg_date=$t_time;}
만약 수정할때, 게시판 날짜를 수정안했으면 예전의 날짜가 그대로 다시 $reg_date에 저장이 되고, 수정을 했으면, 수정한 값이 $reg_date로 새롭게 저장이 됩니다.
그리하여, 그 값을 다시 database의 field에 다시 넣어주게 되는 것입니다.
작성자 : Neoyoung
댓글목록
등록된 댓글이 없습니다.