공지로 등록된글을 10일후에 자동으로 일반목록으로 변경할수 있나요?

공지로 등록된글을 10일후에 자동으로 일반목록으로 변경할수 있나요?

QA

공지로 등록된글을 10일후에 자동으로 일반목록으로 변경할수 있나요?

본문

공지로 체크해서 상단에 올린글을 10일정도후에 자동으로 공지를 해제하고 일반목록으로 변경되게 할 수 있나요?

고수님들 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 6

공지가 풀린 글을 다시 공지로 지정할 수도 있어야 한다면.. 

 

1. 예비필드를 하나 이용합니다. (wr_1)

글 수정시 해당필드에 수정일자를 등록하게 합니다.

write_update.php 파일에서 업데이트 구문중 wr_1 = {$wr_1},  ==> wr_1 = '".G5_TIME_YMDHIS."', 로 변경

글수정시 수정일자가 등록되게됨

 

2. /lib/common.lib.php 파일에 function 변경

 

function notice_delete($bo_table,$wr_id,$day){
global $g5;

    $write_table = $g5['write_prefix'].$bo_table;

    $notice = "";
    $notice_array = explode(",", $wr_id);

    for($i=0;$i<count($notice_array);$i++){

        $sql = "select count(wr_id) as cnt from $write_table where wr_id='{$notice_array[$i]}' and (TO_DAYS('".G5_TIME_YMDHIS."') - TO_DAYS(wr_1)) > '{$day}' ";
        $row = sql_fetch($sql);

        if($row['cnt']>0){
            $bo_notice = board_notice($wr_id, $notice_array[$i], $notice);
            sql_query("update {$g5['board_table']} set bo_notice = '{$bo_notice}' where bo_table = '{$bo_table}'");
        }

    
    }

}

 

날짜를 비교하는 필드를 해당 게시판테이블의 wr_1 필드로 변경..

 

일케하면 재공지로 등록된 공지글은 수정일로부터 10일 후에 다시 공지가 풀리게 됩니다.

 

그럼 수고하세요.


$sql = " select bo_table, bo_notice from g5_board ";
$result = sql_query($sql);
while($row=sql_fetch_array($result)){
    if($row['bo_notice']=="")
        continue;
    $sql1 = "select wr_id from g5_write_{$row['bo_table']} where wr_id in ({$row['bo_notice']}) and now() < adddate(wr_datetime, interval 10 day) ";
    $result1 = sql_query($sql1);
    $new = array();
    while($row1=sql_fetch_array($result1)){
        $new[] = $row1['wr_id'];
    }
    $new_notice = implode(",", $new);
    sql_query("update g5_board set bo_notice = '$new_notice' where bo_table = '{$row['bo_table']}' ");
    unset($new);
}

로또루와님 말씀처럼 db_table.optimize.php파일에

위처럼 하면 되지 않을까 생각합니다.
테스트는 해보지 않았습니다.
글쓴날짜 기준입니다.

(공지체크한 날짜를 기준으로 하려면 게시판 글쓰기에 추가 작업이 필요합니다.)

잘되면 좋겠네요

1. db_table.optimize.php 파일에 추가

 

// 10일이 지난 공지글 삭제
$sql = " select bo_table,bo_notice from {$g5['board_table']} where bo_notice <> '' ";
$result = sql_query($sql);
while ($row=sql_fetch_array($result))
{    
    notice_delete($row['bo_table'],$row['bo_notice'],10);
}
 

위 사항은 반드시 

 

// 실행일 기록
if(isset($config['cf_optimize_date'])) {
    sql_query(" update {$g5['config_table']} set cf_optimize_date = '".G5_TIME_YMD."' ");
}

 

위에 추가하셔야 합니다.

 

 

2. /lib/common.lib.php 파일에 function 추가

 

function notice_delete($bo_table,$wr_id,$day){
global $g5;

    $notice = "";
    $notice_array = explode(",", $wr_id);

    for($i=0;$i<count($notice_array);$i++){

        $sql = "select count(wr_id) as cnt from {$g5['board_new_table']} where bo_table='{$bo_table}' and wr_id='{$notice_array[$i]}' and (TO_DAYS('".G5_TIME_YMDHIS."') - TO_DAYS(bn_datetime)) > '{$day}' ";
        $row = sql_fetch($sql);

        if($row['cnt']>0){
            $bo_notice = board_notice($wr_id, $notice_array[$i], $notice);
            sql_query("update {$g5['board_table']} set bo_notice = '{$bo_notice}' where bo_table = '{$bo_table}'");
        }

    
    }

}
 

db_table.optimize.php

// 10일이 지난 공지글 삭제
$sql = " select bo_table,bo_notice from {$g5['board_table']} where bo_notice <> '' and bo_table in ('a1','a3') ";
$result = sql_query($sql);
while ($row=sql_fetch_array($result))
{    
    notice_delete($row['bo_table'],$row['bo_notice'],1);
}


확인할점

1. 해당 게시판 공지글에 wr_11 필드에 날짜가 들어가 있는지 확인

wr_11 은 추가로 만드신건가요? 그렇다면 /bbs/write_update.php 파일에도 해당 필드값에 대한 쿼리를 추가하셨는지 여부

아마도 기본테이블은 wr_10까지만 있을꺼에요..

2. 환경설정 날짜필드 확인

g5_config 테이블의  cf_optimize_date 필드를 확인해 보세요..

날짜가 오늘날짜로 되어있다면  db_table.optimize.php 파일이 실행되지 않습니다.

db_table.optimize.php 파일 위쪽에 보시면

// 실행일 비교
if(isset($config['cf_optimize_date']) && $config['cf_optimize_date'] >= G5_TIME_YMD)
    return;

cf_optimize_date 필드의 날짜가 오늘날짜보다 크거나 같으면 return 합니다.


테스트 해보시려면 g5_config  테이블의 cf_optimize_date 날짜를 오늘 이전 날짜로 수정하신 후 확인해보셔야 합니다.

 

함 해보시고 안되면 쪽지 주세요....

/bbs/db_table.optimize.php 파일을 여셔서 해당내용을 추가하시면 됩니다.

 

서버를 이용하실 경우에는 클론을 이용하셔도 됩니다.

db_table.optimize.php

// 10일이 지난 공지글 삭제
$sql = " select bo_table,bo_notice from {$g5['board_table']} where bo_notice <> '' ";
$result = sql_query($sql);
while ($row=sql_fetch_array($result))
{    
if($row['bo_table']=='a1' || $row['bo_table']=='a3'){ 
    notice_delete($row['bo_table'],$row['bo_notice'],1);
}
}

 

 

 

common.lib.php

function notice_delete($bo_table,$wr_id,$day){
global $g5;
    $write_table = $g5['write_prefix'].$bo_table;

    $notice = "";
    $notice_array = explode(",", $wr_id);

    for($i=0;$i<count($notice_array);$i++){

        $sql = "select count(wr_id) as cnt from $write_table where wr_id='{$notice_array[$i]}' and (TO_DAYS('".G5_TIME_YMDHIS."') - TO_DAYS(wr_11)) > '{$day}' ";
        $row = sql_fetch($sql);

        if($row['cnt']>0){
            $bo_notice = board_notice($wr_id, $notice_array[$i], $notice);
            sql_query("update {$g5['board_table']} set bo_notice = '{$bo_notice}' where bo_table = '{$bo_table}'");
        }
    }
}

 

답변 감사드립니다. 하루로 잡고 설정해보니 하루지나도 공지가 해제되지 않습니다.

db에는 wr_1대신 wr_11에 정상적으로 값이 쓰여지는데 공지해제가 되지 않네요.;;

답변을 작성하시기 전에 로그인 해주세요.
전체 123,652 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT