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

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

QA

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

답변 6

본문

공지로 체크해서 상단에 올린글을 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에 정상적으로 값이 쓰여지는데 공지해제가 되지 않네요.;;

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
  • 질문이 없습니다.
전체 0
© SIRSOFT
현재 페이지 제일 처음으로