채택완료

날짜종료후 이동 문의 드립니다.

2023-07-16 (일) 00:10:37 3,197

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개

채택된 답변
+20 포인트
2023-07-16 (일) 11:05:43

예를 들어서 아래와 같이 해 볼 수 있을것 같습니다.

Copy
<?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개

네. 자세한 설명 감사합니다. 이글을 지금확인했습니다. 어제 남겨주신 방법으로 안되서 다시 글을 남겨두고 지금 여기글 확인했습니다. 알려주신데로 적용을 해보겠습니다.
2023-07-16 (일) 15:46:52

다음과 같이 수정해 보세요

Copy
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개

네 신경써주셔서 감샇합니다. 뭔가 잘 안되네요. 글쓰기 페이지에 -> <?php echo $start_datetime.' - '.$end_datetime; ?> 이걸로 적용하고 위에 코드는 원본 코드위치에 해도 잘안됩니다. ㅎ
게시판에 게시글 날짜를 어제 날짜로 수정해서 테스트 해봤는데요. 날짜 값이 지난글이기에 종료로 이동되는게 맞는듯한데요. 꼼짝도 안합니다...
이렇게 하시면 기간이 지난 이벤트들은 종료 카테고리로 이동하게 할 수 있을것 같습니다
[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]

직접 테스트를 할 수 있는 자료가 없으니 쿼리문으로만 추정해서 작성해 볼 수 밖에 없네요
네. 감사합니다. 다시 꼼꼼하게 확인해보겠습니다. 신경써 주셔서 너무나 감사합니다.^^
2023-07-16 (일) 14:07:10

시간 또는 분으로 테스트를 해보실 수 있습니다.

테스트 할때는 이런식으로 해보시고 원하시는 구현방식이 잘 적용이 되면 날짜 형식으로 수정하신후 적용하시면 될것 같습니다

Copy
<?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개

자세한설명 감사합니다. 그리고 'wr_1' 이것과 'wr_2' 요걸 --> 'wr_1' 를 '$start_datetime'로 'wr_2'를 '$end_datetime'로 바꾸면되는것이죠? 적용해도 안되서요. ㅎㅎ
여분필드는 사용 안하고 있습니다. 글쓰기 할때 폼입력값이 달력으로 날짜만 체크하게 되어 있어서요. 그래서 구한 소스코드 원본의 날짜 체크하는 부분이

$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로..
작업중이신 소스 코드를 전체적으로 다시 올려보세요..
전체소스 올려드렸습니다. 내용이 많이 복잡하구요. 한가지 이해가 안가는 부분이 있습니다. 추천 버튼도 문제가 좀 있습니다. 다른 css 버튼 소스를 가져와서 적용해도 추천과 폼에 작동하는 부분이 안되는듯해요. 클래스명을 바꿔서 해도.. ㅠ
Copy
<?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.코드를 어디 파일에다 업로드 해야 하나요?

정말 여러가지로 감사드립니다.
답변주셔서 감사합니다. 요 파일은 write_update.head.skin.php 여기에 올려두면 된다는 말씀이시죠? 일단 해보겠습니다.
알려주신 방법으로 write_update.head.skin.php 여기 파일에 넣어서 테스트 해보니 반응이 없습니다.그래서 해당 write.skin.php파일에서 적용해보니 링크만 /bbs/board.php?bo_table=B 이쪽으로 가버리고 기존 A-board는 사라저 버리구요. 위에 알려주신 소스가 보드 자체로 이동시켜주는듯한데요. 해당 이벤트 종료된 게시물만 이동하게는 안되나요?? 혹시나해서.. --> echo 'ongoing event A-board'; 부분과 <--> header('Location: /bbs/board.php?bo_table=B'); 이부분 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는 종료일자를 나타내는 변수입니다

답변을 작성하려면 로그인이 필요합니다.