게시물 날짜 수정하기 > 기술자료 | 해피정닷컴

게시물 날짜 수정하기 > 기술자료

본문 바로가기

사이트 내 전체검색

게시물 날짜 수정하기 > 기술자료

제로보드 게시물 날짜 수정하기

페이지 정보


본문

게시물의 날짜를 임의로 수정하기 좋은 팁은 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

댓글목록

등록된 댓글이 없습니다.


Total 32건 2 페이지
  • RSS

검색

해피정닷컴 정보

회사소개 회사연혁 협력사 오시는길 서비스 이용약관 개인정보 처리방침

회사명: 해피정닷컴   대표: 정창용   전화: 070-7600-3500   팩스: 042-670-8272
주소: (34368) 대전시 대덕구 대화로 160 대전산업용재유통단지 1동 222호
개인정보보호책임자: 정창용   사업자번호: 119-05-36414
통신판매업신고: 제2024-대전대덕-0405호 [사업자등록확인]  
Copyright 2001~2024 해피정닷컴. All Rights Reserved.