공지로 등록된글을 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에 정상적으로 값이 쓰여지는데 공지해제가 되지 않네요.;;