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');
이렇게 해서
<?php
$dateDiff = intval((strtotime($end_datetime)-strtotime($today_datetime)) / 86400);
if($dateDiff > 0){
$bcolor = "color";
?>
<div class="date-item bg-<?php echo $bcolor; ?>">
<span class="date" style="font-size:20px;">이벤트중</span>
<?php }else{
$bcolor = "gray";
?>
<div class="date-item bg-<?php echo $bcolor; ?>">
<span class="date" style="font-size:20px;">이벤트끝</span>
<?php } ?>
이벤트 기간 : <?php echo $start_datetime.' - '.$end_datetime; ?>
여기에 이벤트 끝값에 여분필드를 사용해야될듯한데요.
아니면 -> $end_datetime = substr($po['po_endtime'],0,10); 이걸 이용해서 할수가 있는지요??
날짜설정후 이벤트시작후 설정된 날짜가 종료가 되면 B게시판 으로 이동.
여기에 작성후 write.skin.php / write_update.head.skin.php 여기에 여분필드값과 B게시판명 넣고
하면 될듯한데요.. 코드과 영 발코딩이라 어떻게 해야될지 시작부터 걱정이네요.
소스 방법을 알려주시면 감사하겠습니다.
답변 5개 / 댓글 13개
예를 들어서 아래와 같이 해 볼 수 있을것 같습니다.
<?php
// 이벤트 시작일과 종료일을 설정합니다.
$start_datetime = "2023-07-01";
$end_datetime = "2023-07-15";
$today_datetime = date("Y-m-d"); // 현재 날짜를 가져옴.
$dateDiff = intval((strtotime($end_datetime) - strtotime($today_datetime)) / 86400);
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를 사용하여 이동.
}
?>
<div class="date-item bg-<?php echo $bcolor; ?>">
<span class="date" style="font-size:20px;"><?php echo $eventStatus; ?></span>
</div>
이벤트 기간: <?php echo $start_datetime . ' - ' . $end_datetime; ?>
$start_datetime과 $end_datetime 변수를 이벤트의 실제 시작일과 종료일로 설정하고, $boardID 변수를 이동할 게시판의 ID로 수정후 적용하면 이벤트 종료 후 $boardID에 지정된 게시판으로 자동으로 이동하게 할 수 있을 것 같습니다.
참고하셔서 원하시는 로직으로 구현 하시면 될 것 같습니다.
답변에 대한 댓글 1개
다음과 같이 수정해 보세요
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']}'");
// 종료 카테고리로 이동하는 코드 추가
$move_category = '종료카테고리아이디'; // 이동할 카테고리 아이디로 변경해야 함
sql_query("UPDATE {$write_table} SET ca_name = '{$move_category}' 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'");
}
?>
출력 부분에서 이벤트기간 : <?php echo $start_datetime.' - '.$end_datetime; ?> 이렇게 작성하시면 될것 같습니다.
답변에 대한 댓글 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]
직접 테스트를 할 수 있는 자료가 없으니 쿼리문으로만 추정해서 작성해 볼 수 밖에 없네요
시간 또는 분으로 테스트를 해보실 수 있습니다.
테스트 할때는 이런식으로 해보시고 원하시는 구현방식이 잘 적용이 되면 날짜 형식으로 수정하신후 적용하시면 될것 같습니다
<?php
// 하루에 한 번 날짜와 시간으로 카테고리 업데이트
if (G5_SERVER_TIME != $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_datetime = $row['wr_1']; // 시작일자 및 시간
$end_datetime = $row['wr_2']; // 종료일자 및 시간
$current_datetime = date('Y-m-d H:i:s'); // 현재 날짜 및 시간
$new_ca_name = '';
if ($end_datetime < $current_datetime) {
$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_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로..
<?php
$end_datetime = '2023-07-16 09:00:00';
$today_datetime = date('Y-m-d H:i:s');
if (strtotime($end_datetime) < strtotime($today_datetime)) {
header('Location: /bbs/board.php?bo_table=B');
} else {
echo 'ongoing event A-board';
}
?>
답변에 대한 댓글 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는 종료일자를 나타내는 변수입니다
답변을 작성하려면 로그인이 필요합니다.