날짜지난 게시물 처리
본문
관리자가 wr_10 = '마감' 이라고 변경하면
리스트페이지에서 해당 게시물의 목록대신 "마감된 이벤트 입니다." 라고 표시되게 적용중입니다.
이벤트 건수가 많아지면서 날짜를 일일히 확인하기도 어렵고,
종종 실수도 있고 해서요.
wr_2 에 달력입력 형태로 마감일을 받고 있는데요.
wr_2 의 날짜와 현재 날짜를 비교해서, 마감일이 지나면
wr_10 = '마감' 으로 변하면서, 목록에는 "마감된 이벤트"로 보이게 하고 싶습니다.
이렇게 구현하려면 어떻게 수정해야 할까요?
답변 3
1. extend/default.config.php에 넣으세요
if($config['cf_1'] < G5_TIME_YMD){
$today = G5_TIME_YMD;
sql_query("update {$g5['config_table']} set cf_1='$today' "); //하루에 한번만 처리되게 함
$ev_table= $g5['write_prefix'].'해당게시판';
sql_query("update $ev_table set wr_10='마감' where wr_10='' and wr_2<'$today' ");
}
2. list스킨 for문 디음에 추가
if($list[$i]['wr_10'] =='마감'){
$list[$i]['subject'] ='마감된 이벤트';
$list[$i]['href'] ="javascript:alert('마감된 이벤트')";
}
3.view스킨에도 마감 내용을 넣으려면
if($view['wr_10'] =='마감') alert('마감');
몇가지 방법이 있을텐데요.. 아래의 코드도 참고를 해보세요.
list.skin.php
<?php
// 게시물 목록을 출력하는 부분에서
for ($i=0; $i<count($list); $i++) {
// 마감일 체크
$deadline = strtotime($list[$i]['wr_2']); // wr_2의 날짜를 타임스탬프로 변환
$today = strtotime(date('Y-m-d')); // 오늘 날짜
// 마감일이 지났다면 wr_10을 '마감'으로 업데이트
if ($deadline < $today && $list[$i]['wr_10'] != '마감') {
sql_query(" UPDATE {$write_table} SET wr_10 = '마감' WHERE wr_id = '{$list[$i]['wr_id']}' ");
$list[$i]['wr_10'] = '마감';
}
// 마감된 경우 표시
if ($list[$i]['wr_10'] == '마감') {
echo '<tr><td colspan="6">마감된 이벤트입니다.</td></tr>';
continue;
}
}
?>
※ write_update.php
수정: 마감일 처리 추가
<?php
// 현재 날짜 가져오기
$current_date = date('Y-m-d');
// wr_2(마감일) 확인 후 wr_10 업데이트
if (isset($write['wr_2']) && $write['wr_2'] < $current_date) {
$sql = "UPDATE {$write_table} SET wr_10 = '마감' WHERE wr_id = '{$write['wr_id']}'";
sql_query($sql);
}
?>
- list.skin.php
수정: "마감된 이벤트 입니다." 메시지 표시
<?php
if ($write['wr_10'] === '마감') {
echo "<div class='event-status'>마감된 이벤트 입니다.</div>";
}
?>
- 프로젝트/특정폴더/update_expired_events.php
파일 생성 > 크론
<?php
include_once('./common.php'); // 공통 설정 불러오기
$current_date = date('Y-m-d');
// 마감일이 지난 이벤트 업데이트
$sql = "UPDATE {$g5['write_table']}
SET wr_10 = '마감'
WHERE wr_2 < '{$current_date}' AND wr_10 != '마감'";
$result = sql_query($sql);
echo "Updated " . sql_num_rows($result) . " expired events.";
?>
- cron 설정으로 ~
0 0 * * * /usr/bin/php /프로젝트/특정폴더/update_expired_events.php