날짜종료후 이동 문의 드립니다. 채택완료
A게시판에서요 이벤트 시작때 날짜설정 -> 날짜 종료되면-> B게시판 이동
이런형태로 소스를 구해서 편집하고 공부하고 있습니다.
날짜 종료 까지는 되어서 이동하려고 하는데 어떤 방법이 좋을까 합니다.
여분필드로 업데이트파일에 wr_1 이용해서 보내는 방법이 낳을 듯한데요.
$start_datetime = substr($po['po_datetime'],0,10); $end_datetime = substr($po['po_endtime'],0,10); $today_datetime = date('Y-m-d');
이렇게 해서
0){ $bcolor = "color"; ?>
여기에 이벤트 끝값에 여분필드를 사용해야될듯한데요.
아니면 -> $end_datetime = substr($po['po_endtime'],0,10); 이걸 이용해서 할수가 있는지요??
날짜설정후 이벤트시작후 설정된 날짜가 종료가 되면 B게시판 으로 이동.
여기에 작성후 write.skin.php / write_update.head.skin.php 여기에 여분필드값과 B게시판명 넣고
하면 될듯한데요.. 코드과 영 발코딩이라 어떻게 해야될지 시작부터 걱정이네요.
소스 방법을 알려주시면 감사하겠습니다.
답변 5개
예를 들어서 아래와 같이 해 볼 수 있을것 같습니다.
</p>
<p><?php
// 이벤트 시작일과 종료일을 설정합니다.
$start_datetime = "2023-07-01";
$end_datetime = "2023-07-15";</p>
<p>$today_datetime = date("Y-m-d"); // 현재 날짜를 가져옴.</p>
<p>$dateDiff = intval((strtotime($end_datetime) - strtotime($today_datetime)) / 86400);</p>
<p>if ($dateDiff > 0) {
$bcolor = "color";
$boardID = 1; // 이동할 게시판의 ID를 지정함.
$eventStatus = "이벤트중";
} else {
$bcolor = "gray";
$boardID = 2; // 이벤트 종료 후 이동할 게시판의 ID를 지정함.
$eventStatus = "이벤트끝";
// 이동할 게시판으로 이동시키는 코드를 추가합니다.
$moveURL = "/bbs/board.php?bo_table=" . $boardID; // 이동할 게시판의 URL을 생성.
echo "<script>window.location.href = '{$moveURL}';</script>"; // JavaScript를 사용하여 이동.
}
?></p>
<p><div class="date-item bg-<?php echo $bcolor; ?>">
<span class="date" style="font-size:20px;"><?php echo $eventStatus; ?></span>
</div></p>
<p>이벤트 기간: <?php echo $start_datetime . ' - ' . $end_datetime; ?>
$start_datetime과 $end_datetime 변수를 이벤트의 실제 시작일과 종료일로 설정하고, $boardID 변수를 이동할 게시판의 ID로 수정후 적용하면 이벤트 종료 후 $boardID에 지정된 게시판으로 자동으로 이동하게 할 수 있을 것 같습니다.
참고하셔서 원하시는 로직으로 구현 하시면 될 것 같습니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
다음과 같이 수정해 보세요
</p>
<p>if (G5_TIME_YMD != $board['bo_1']) {
// 이미 종료 처리된 것은 필요 없으니 가져오지 않음
$sql = "SELECT wr_id, ca_name, start_datetime, end_datetime FROM {$write_table} WHERE wr_is_comment = 0 AND start_datetime <> '' AND end_datetime <> '' AND ca_name <> '종료' ORDER BY wr_id";
$result = sql_query($sql);
for ($i = 0; $row = sql_fetch_array($result); $i++) {
$start_date = substr($row['start_datetime'], 0, 10); // 시작일자
$end_date = substr($row['end_datetime'], 0, 10); // 종료일자</p>
<p> $new_ca_name = '';
if ($end_date < G5_TIME_YMD) {
$new_ca_name = '종료';
}</p>
<p> if ($new_ca_name) {
if ($new_ca_name == $row['ca_name']) continue; // 그냥 통과</p>
<p> sql_query("UPDATE {$write_table} SET ca_name = '{$new_ca_name}' WHERE wr_id = '{$row['wr_id']}'");</p>
<p> // 종료 카테고리로 이동하는 코드 추가
$move_category = '종료카테고리아이디'; // 이동할 카테고리 아이디로 변경해야 함
sql_query("UPDATE {$write_table} SET ca_name = '{$move_category}' WHERE wr_id = '{$row['wr_id']}'");
}
}</p>
<p> sql_query("UPDATE {$g5['board_table']} SET bo_1_subj = '카테고리업데이트', bo_1 = '" . G5_TIME_YMD . "' WHERE bo_table = '$bo_table'");
}
?></p>
<p>
출력 부분에서 이벤트기간 : 이렇게 작성하시면 될것 같습니다.
답변에 대한 댓글 3개
게시판에 게시글 날짜를 어제 날짜로 수정해서 테스트 해봤는데요. 날짜 값이 지난글이기에 종료로 이동되는게 맞는듯한데요. 꼼짝도 안합니다...
[code]
// 이벤트 기간이 지난 이벤트를 가져와서 처리
$sql = "SELECT wr_id, ca_name, start_datetime, end_datetime FROM {$write_table} WHERE wr_is_comment = 0 AND start_datetime <> '' AND end_datetime <> '' AND ca_name <> '종료' AND end_datetime < NOW() ORDER BY wr_id";
$result = sql_query($sql);
while ($row = sql_fetch_array($result)) {
$wr_id = $row['wr_id'];
$move_category = '종료카테고리아이디'; // 이동할 카테고리 아이디로 변경해야 함
// 종료 카테고리로 이동하는 코드 추가
sql_query("UPDATE {$write_table} SET ca_name = '{$move_category}' WHERE wr_id = '{$wr_id}'");
}
?>
[/code]
직접 테스트를 할 수 있는 자료가 없으니 쿼리문으로만 추정해서 작성해 볼 수 밖에 없네요
댓글을 작성하려면 로그인이 필요합니다.
if (!function_exists('conv_rich_content')) { function conv_rich_content($matches){ global $view; return view_image($view, $matches[1], $matches[2]); } }
if($board['as_code']) { apms_script('code'); }
$is_notice_list = false; //공지제외☆★
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨 add_stylesheet('', 0); add_javascript(''," target="_blank" rel="noopener noreferrer">https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.1/modernizr.min.js">', 0); add_stylesheet('', 0);
// 이미지 비율 $thumb_w = $board['bo_'.MOBILE_.'gallery_width']; $thumb_h = $board['bo_'.MOBILE_.'gallery_height']; $img_h = apms_img_height($thumb_w, $thumb_h); // 이미지 높이
// 너비 $item_w = apms_img_width($board['bo_gallery_cols']);
// 간격 $gap_right = ($boset['gap_r'] == "") ? 15 : $boset['gap_r']; $gap_bottom = ($boset['gap_b'] == "") ? 30 : $boset['gap_b'];
$ellipsis = (G5_IS_MOBILE) ? '' : ' class="ellipsis"'; $ellipsis = ($thumb_h > 0) ? $ellipsis : ''; $list_cnt = count($list);
if (G5_TIME_YMD != $board['bo_1']) {
// 이미 종료 처리된 것은 필요 없으니 가져오지 않음 $sql = "SELECT wr_id, ca_name, start_datetime, end_datetime FROM {$write_table} WHERE wr_is_comment = 0 AND start_datetime <> '' AND end_datetime <> '' AND ca_name <> '종료' ORDER BY wr_id"; $result = sql_query($sql); for ($i = 0; $row = sql_fetch_array($result); $i++) {
$start_date = substr($row['start_datetime'], 0, 10); // 시작일자 $end_date = substr($row['end_datetime'], 0, 10); // 종료일자
$new_ca_name = ''; if ($end_date < G5_TIME_YMD) { $new_ca_name = '종료'; }
if ($new_ca_name) { if ($new_ca_name == $row['ca_name']) continue; // 그냥 통과
sql_query("UPDATE {$write_table} SET ca_name = '{$new_ca_name}' WHERE wr_id = '{$row['wr_id']}'"); } }
sql_query("UPDATE {$g5['board_table']} SET bo_1_subj = '카테고리업데이트', bo_1 = '" . G5_TIME_YMD . "' WHERE bo_table = '$bo_table'"); } ?>
// 신고 $is_shingo = ($board['as_shingo'] > 0) ? true : false;
$item_font = (G5_IS_MOBILE) ? '' : ' font-12'; ?>
if($list[$i]['is_notice']) continue;
// 글내용 변수로 치환 $view = $list[$i];
// list 지우기 unset($list[$i]);
$is_lock = false; $is_closed = false; if ($view['icon_secret'] || $view['is_lock']) { if($is_admin || ($view['mb_id'] && $view['mb_id'] == $member['mb_id'])) { ; } else { $is_closed = true; $view['wr_content'] = ($view['is_lock']) ? '잠긴글입니다' : '비밀글입니다.'; } $is_lock = true; }
// 세션 $ss_name = 'ss_view_'.$bo_table.'_'.$view['wr_id']; if (!get_session($ss_name)) { sql_query(" update {$write_table} set wr_hit = wr_hit + 1 where wr_id = '{$view['wr_id']}' "); sql_query(" update {$g5['board_new_table']} set as_hit = as_hit + 1 where bo_table = '{$bo_table}' and wr_id = '{$view['wr_id']}' ", false); set_session($ss_name, TRUE); }
// 링크정리 $scrap_href = ($is_member) ? './scrap_popin.php?bo_table='.$bo_table.'&wr_id='.$view['wr_id'] : ''; $good_href = ($is_good) ? './good.php?bo_table='.$bo_table.'&wr_id='.$view['wr_id'].'&good=good' : ''; $nogood_href = ($is_nogood) ? './good.php?bo_table='.$bo_table.'&wr_id='.$view['wr_id'].'&good=nogood' : '';
$html = 0; if (strstr($view['wr_option'], 'html1')) $html = 1; else if (strstr($view['wr_option'], 'html2')) $html = 2;
$is_torrent = false;
if($is_closed) { $view['content'] = $view['wr_content']; } else {
//첨부파일 $view['file'] = get_file($bo_table, $view['wr_id']);
$view['content'] = conv_content($view['wr_content'], $html);
}
// Tag $is_tag = false; if($view['as_tag']) { $tag_list = apms_get_tag($view['as_tag']); if($tag_list) $is_tag = true; }
$attach_list = ''; if(!$is_closed) { if (implode('', $view['link'])) { // 링크 for ($k=1; $k<=count($view['link']); $k++) { if ($view['link'][$k]) { $attach_list .= ''; $attach_list .= ' '.cut_str($view['link'][$k], 70).' + '.$view['link_hit'][$k].''.PHP_EOL; } } }
// 가변 파일
$j = 0;
for ($k=0; $k
// FA아이콘 $fa_icon = 'comment'; if($is_lock) { $fa_icon = 'lock'; } else if ($view['icon_hot']) { $fa_icon = 'thumbs-up'; } else if ($view['icon_new']) { $fa_icon = 'bar-chart'; } else if ($view['icon_link']) { $fa_icon = 'link'; } else if ($view['icon_file']) { $fa_icon = 'download'; }
// 댓글 $cmt_id = 'list_comment_'.$view['wr_id']; $cmt_url = $list_skin_url.'/list.comment.php?bo_table='.$bo_table.'&wr_id='.$view['wr_id'];
?>
$po_arr = array(); //참여등급 if($po['po_level'] > 0) { $pmg = 'xp_grade'.$po['po_level']; $po_arr[] = $xp[$pmg].' 이상'; }
//참여점수 if($po['po_point'] > 0) { $po_arr[] = number_format($po['po_point']).AS_MP.' 적립'; }
//종료일 if($po['po_end']) { $po_arr[] = str_replace("-", ".", substr($po['po_endtime'],0,10)).' 까지'; }
//참여수 if($po['po_cnt']) { $po_arr[] = '총 '.number_format($po['po_cnt']).'명 참여'; }
//메시지 $po_msg = (!empty($po_arr)) ? implode(' / ', $po_arr) : '';
$start_datetime = substr($po['po_datetime'],0,10); $end_datetime = substr($po['po_endtime'],0,10); $today_datetime = date('Y-m-d'); } ?>
0 && $k%$board['bo_gallery_cols'] == 0) { ?>
$po_stx1 = get_text($po['po_poll1']); $po_stx2 = get_text($po['po_poll2']);
$po_cnt1 = $po['po_cnt1']; $po_cnt2 = $po['po_cnt2'];
$po_per1 = ($po['po_cnt1'] > 0) ? round(($po_cnt1 / $po['po_cnt']) * 1000) / 10 : 0; $po_per2 = ($po['po_cnt2'] > 0) ? round(($po_cnt2 / $po['po_cnt']) * 1000) / 10 : 0;
$wr_id2 = $view['wr_id']; $po_id2 = $po['po_id'];
if($po_per1 == "0" ){ $po_per3 = "0"; }else if($po_per1 == "100"){ $po_per3 = "100"; }else{ $po_per3 = $po_per1 + 5; }
if($po_per2 == "0" ){ $po_per4 = "0"; }else if($po_per2 == "100"){ $po_per4 = "100"; }else{ $po_per4 = $po_per2 + 5; } ?>
댓글을 작성하려면 로그인이 필요합니다.
시간 또는 분으로 테스트를 해보실 수 있습니다.
테스트 할때는 이런식으로 해보시고 원하시는 구현방식이 잘 적용이 되면 날짜 형식으로 수정하신후 적용하시면 될것 같습니다
</p>
<p><?php
// 하루에 한 번 날짜와 시간으로 카테고리 업데이트
if (G5_SERVER_TIME != $board['bo_1']) {</p>
<p> // 이미 종료 처리된 것은 필요 없으니 가져오지 않음
$sql = "SELECT wr_id, ca_name, wr_1, wr_2 FROM {$write_table} WHERE wr_is_comment = 0 AND wr_1 <> '' AND wr_2 <> '' AND ca_name <> '종료' ORDER BY wr_id";
$result = sql_query($sql);
for ($i = 0; $row = sql_fetch_array($result); $i++) {</p>
<p> $start_datetime = $row['wr_1']; // 시작일자 및 시간
$end_datetime = $row['wr_2']; // 종료일자 및 시간</p>
<p> $current_datetime = date('Y-m-d H:i:s'); // 현재 날짜 및 시간</p>
<p> $new_ca_name = '';
if ($end_datetime < $current_datetime) {
$new_ca_name = '종료';
}</p>
<p> if ($new_ca_name) {
if ($new_ca_name == $row['ca_name']) continue; // 그냥 통과</p>
<p> sql_query("UPDATE {$write_table} SET ca_name = '{$new_ca_name}' WHERE wr_id = '{$row['wr_id']}'");
}
}</p>
<p> sql_query("UPDATE {$g5['board_table']} SET bo_1_subj = '카테고리업데이트', bo_1 = '" . G5_SERVER_TIME . "' WHERE bo_table = '$bo_table'");
}
?>
G5_SERVER_TIME은 그누보드에서 사용하는 현재 서버 시간을 나타내는 상수입니다.
테스트를 진행할 때, 현재 시간과 분이 시작일자 및 시간과 종료일자 및 시간 사이에 위치해야 정상적으로 테스트할 수 있습니다
답변에 대한 댓글 4개
$start_date = substr($row['start_datetime'], 0, 10); // 시작일자
$end_date = substr($row['end_datetime'], 0, 10); // 종료일자
이렇게 되어 있어서요. 그래서 다른 코드소스를 구해서 구한 코드중의 'wr_1' 이것과 'wr_2' 위에 start_datetime, end_datetime로 대채했는데 안되더라구요. 원본코드에 있는 것은 'start_datetime이고 다른 소스는 wr_1로..
댓글을 작성하려면 로그인이 필요합니다.
</p>
<p><?php
$end_datetime = '2023-07-16 09:00:00';
$today_datetime = date('Y-m-d H:i:s');</p>
<p> </p>
<p>if (strtotime($end_datetime) < strtotime($today_datetime)) {
header('Location: /bbs/board.php?bo_table=B');
} else {
echo 'ongoing event A-board';
}
?></p>
<p>
답변에 대한 댓글 5개
echo 'ongoing event A-board'; 이부분에서 게시판명이 "free" 라면
1.echo 'ongoing free'; 가 되는 것인가요?
2.코드를 어디 파일에다 업로드 해야 하나요?
정말 여러가지로 감사드립니다.
--------------------------------------
if (strtotime($end_datetime) < strtotime($today_datetime)) {
header('Location: /bbs/board.php?bo_table=이동될게시판B');
} else {
echo '($bo_table == "이벤트게시판A" && $wr_id)';
}
---------------------------------------
이렇게 해도 안되네요.
제가 지금 테스트하는게 아미나보드라서요 알려주신 코드와는 잘 안되서요. 방법을 바꾸려고 찾아본 소스입니다.
분류항목을 진행중|종료 이렇게 정해두고..
이벤트 진행중 -> 이벤트 종료 / 이같은게시판에서 "게시글중 마감날짜에 종료"가 되면 해당 "종료" 분류로 이동시키려고 합니다.
아래 코드 한번 봐주시겠어요?
---------------------------------------------------
<?php
//하루에 한번 날짜로 카테고리 업데이트
if(G5_TIME_YMD != $board['bo_1']){
// 이미 진행완료 처리된 것과 날짜 정보가 없는 것은 필요 없으니 빼고 가져온다.
$sql = " select wr_id, ca_name, wr_1, wr_2 from {$write_table} where wr_is_comment = 0 and wr_1 <> '' and wr_2 <>'' and ca_name <> '종료' order by wr_id ";
$result = sql_query($sql);
for ($i=0; $row = sql_fetch_array($result); $i++) {
// 이렇게 해도 됩니다.
$start_date = substr($row['wr_1'], 0, 10);
$end_date = substr($row['wr_2'], 0, 10);
// 아래처럼 해도 됩니다.
// $start_date = date('Y-m-d', $row['wr_1']);
// $end_date = date('Y-m-d', $row['wr_2']);
$new_ca_name = '';
if($start_date <= G5_TIME_YMD && $end_date >= G5_TIME_YMD){
$new_ca_name = '진행중';
} else if($start_date < G5_TIME_YMD && $end_date < G5_TIME_YMD){
$new_ca_name = '종료';
}
if($new_ca_name) {
if($new_ca_name == $row['ca_name']) continue; // 그냥 통과
sql_query(" update {$write_table} set ca_name='{$new_ca_name}' where wr_id = '{$row['wr_id']}' ");
}
}
sql_query(" update {$g5['board_table']} set bo_1_subj='카테고리업데이트', bo_1='".G5_TIME_YMD."' where bo_table ='$bo_table' ");
}
?>
-----------------------------------------------------------
위의 코드중
'wr_1' 이것과 'wr_2' 요걸 --> 'wr_1' 를 '$start_datetime'로 'wr_2'를 '$end_datetime'로 바꾸면 될듯한데요. 이게 맞는지요?? 분류항목을 진행중|종료 이렇게 해뒀습니다. 날짜가 하루업데이트라 아직 확인테스트는 못하고 있지만요. 코드가 맞을것 같기는 한데요.
[code]
<?php
// 하루에 한 번 날짜로 카테고리 업데이트
if (G5_TIME_YMD != $board['bo_1']) {
// 이미 종료 처리된 것은 필요 없으니 가져오지 않음
$sql = "SELECT wr_id, ca_name, wr_1, wr_2 FROM {$write_table} WHERE wr_is_comment = 0 AND wr_1 <> '' AND wr_2 <> '' AND ca_name <> '종료' ORDER BY wr_id";
$result = sql_query($sql);
for ($i = 0; $row = sql_fetch_array($result); $i++) {
$start_date = substr($row['wr_1'], 0, 10); // 시작일자
$end_date = substr($row['wr_2'], 0, 10); // 종료일자
$new_ca_name = '';
if ($end_date < G5_TIME_YMD) {
$new_ca_name = '종료';
}
if ($new_ca_name) {
if ($new_ca_name == $row['ca_name']) continue; // 그냥 통과
sql_query("UPDATE {$write_table} SET ca_name = '{$new_ca_name}' WHERE wr_id = '{$row['wr_id']}'");
}
}
sql_query("UPDATE {$g5['board_table']} SET bo_1_subj = '카테고리업데이트', bo_1 = '" . G5_TIME_YMD . "' WHERE bo_table = '$bo_table'");
}
?>
[/code]
이렇게 하시면 이벤트 종료시 종료 카테고리로 이동되게 할 수 있을 것 같습니다.
종료일자가 현재 날짜보다 이전인 게시글들을 '종료' 카테고리로 업데이트합니다. $start_date은 시작일자를, $end_date는 종료일자를 나타내는 변수입니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인