스크랩에서 일정이 지나면 자동 삭제

2024-03-07 (목) 05:35:39 2,359

안녕하세요. 

여분필드 wr2를 시간으로 사용하고 있습니다.

스크랩한 글에서 wr2의 시간이 지나면 스크랩에서 자동으로 삭제되게 할 수 있을까요?

최신게시물스킨에서 일정날짜가 지나면 삭제되는 원리랑 비슷할거 같은데 소스를 잘 모르겠네요..ㅠㅠ

bbs/scrap.php 파일입니다.

<?php
include_once('./_common.php');

if (!$is_member)
    alert_close('회원만 조회하실 수 있습니다.');

$sql_common = " from {$g5['scrap_table']} where mb_id = '{$member['mb_id']}' ";

$sql_order = " order by wr_id asc ";

$sql = " select count(*) as cnt $sql_common ";
$row = sql_fetch($sql);
$total_count = $row['cnt'];

$rows = $config['cf_page_rows'];
$total_page  = ceil($total_count / $rows);  // 전체 페이지 계산
if ($page < 1) $page = 1; // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $rows; // 시작 열을 구함

$list = array();

$sql = " select *
            $sql_common
            $sql_order
            limit $from_record, $rows ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {

    $list[$i] = $row;

    // 순차적인 번호 (순번)
    $num = $total_count - ($page - 1) * $rows - $i;

    // 게시판 제목
    $sql2 = " select bo_subject from {$g5['board_table']} where bo_table = '{$row['bo_table']}' ";
    $row2 = sql_fetch($sql2);
    if (!$row2['bo_subject']) $row2['bo_subject'] = '[게시판 없음]';

    // 게시물 제목
    $tmp_write_table = $g5['write_prefix'] . $row['bo_table'];
    $sql3 = " select wr_subject, wr_2 from $tmp_write_table where wr_id = '{$row['wr_id']}' ";
    $row3 = sql_fetch($sql3, FALSE);
    $subject = ($row3['wr_subject']) ? get_text(cut_str($row3['wr_subject'], 100)) : '글이 없습니다.';

    $list[$i]['num'] = $num;
    $list[$i]['opener_href'] = './board.php?bo_table='.$row['bo_table'];
    $list[$i]['opener_href_wr_id'] = './board.php?bo_table='.$row['bo_table'].'&amp;wr_id='.$row['wr_id'];
    $list[$i]['bo_subject'] = $row2['bo_subject'];
    $list[$i]['subject'] = $subject;

$list[$i]['wr_2'] = $row3['wr_2'];
    $list[$i]['del_href'] = './scrap_delete.php?ms_id='.$row['ms_id'].'&amp;page='.$page;
}

$write_page_rows = (G5_IS_MOBILE) ? $config['cf_mobile_pages'] : $config['cf_write_pages'];
$list_page = $_SERVER['PHP_SELF'].'?'.$qstr.'&amp;page=';

// Page ID
$pid = ($pid) ? $pid : '';
$at = apms_page_thema($pid);
include_once(G5_LIB_PATH.'/apms.thema.lib.php');

// 스킨 체크
list($member_skin_path, $member_skin_url) = apms_skin_thema('member', $member_skin_path, $member_skin_url); 

// 설정값 불러오기
$is_scrap_sub = true;
@include_once($member_skin_path.'/config.skin.php');

$g5['title'] = get_text($member['mb_nick']).'님의 관심목록';

if($is_scrap_sub) {
    include_once(G5_PATH.'/head.php');
    if(!USE_G5_THEME) @include_once(THEMA_PATH.'/head.sub.php');
} else {
    include_once('./_head.php');
}

$skin_path = $member_skin_path;
$skin_url = $member_skin_url;

// 스킨설정
$wset = (G5_IS_MOBILE) ? apms_skin_set('member_mobile') : apms_skin_set('member');

$setup_href = '';
if(is_file($skin_path.'/setup.skin.php') && ($is_demo || $is_designer)) {
    $setup_href = './skin.setup.php?skin=member&amp;ts='.urlencode(THEMA);
}

include_once($skin_path.'/scrap.skin.php');

if($is_scrap_sub) {
    if(!USE_G5_THEME) @include_once(THEMA_PATH.'/tail.sub.php');
    include_once(G5_PATH.'/tail.php');
} else {
    include_once('./_tail.php');
}
?>

|

답변 2개 / 댓글 4개

Copy
// 게시물 제목

    $list[$i]['num'] = $num;


    $tmp_write_table = $g5['write_prefix'] . $row['bo_table'];
    $sql3 = " select wr_subject, wr_2 from $tmp_write_table where wr_id = '{$row['wr_id']}' ";
    $row3 = sql_fetch($sql3, FALSE);

    if ($row3['wr_2'] > G5_TIME_YMDHIS) {

        sql_query("delete from {$g5['scrap_table']} where mb_id = '{$member['mb_id']}' and bo_table= '{$row['bo_table']}' and wr_id = '{$row['wr_id']}'");

        sql_query("update `{$g5['member_table']}` set mb_scrap_cnt = '".get_scrap_totals($member['mb_id'])."' where mb_id = '{$member['mb_id']}'");
     

        $subject = "삭제된 스크랩"; 
        $list[$i]['opener_href'] = './board.php?bo_table='.$row['bo_table'];
        $list[$i]['opener_href_wr_id'] = '';

    } else {
        $subject = ($row3['wr_subject']) ? get_text(cut_str($row3['wr_subject'], 100)) : '글이 없습니다.';
        $list[$i]['opener_href'] = './board.php?bo_table='.$row['bo_table'];
        $list[$i]['opener_href_wr_id'] = './board.php?bo_table='.$row['bo_table'].'&wr_id='.$row['wr_id'];

    }

스크랩창 열었을때 한번은 보이니 대신에 링크를 죽이고 삭제 되었다는 subejct를 띄우고

그 다음부터는 삭제되고 스크랩 리스트에서 안보일겁니다.

아예 안보이게 하면 갯수가 페이징해서 불러오다보니 한페이지가 텅 비어보일수도 있을것 같아서

소스가 그누원본이 아니라 member 테이블에 mb_scrap_cnt를 어떻게 하는지 몰라서

그누 원본소스 기준 scrap_delete.php 기준으로 넣기는 했습니다. g5_scrap primary가 ms_id 일텐데

올려주신 소스만으로는 그게 있는지 판단하기 어려워서 delete where 조건을 bo_table 이랑 wr_id로 일단적었습니다. 참고해서 수정해서 적용하세요

답변에 대한 댓글 2개

답변 감사합니다!

이파일을 skin/member/scrap.skin.php 파일에다가 넣는건가요?

스크랩 리스트에 제목을 사용하지 않아서 그런지.. 반응이 없네요.

제목대신 wr_2값을 리스트에 출력하게 했는데 이걸 제목대신 넣어서도 사용해봤는데 반응이 없네요 ㅠ

본문에서 조금 오해가 있었을수도 있는데 wr_2값이 현재 시간을 지나면 삭제된다는 내용이었어요.

아래가 스킨파일입니다..

<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
include_once(G5_LIB_PATH.'/thumbnail.lib.php');

$thum_width = 209; // 썸네일 가로크기
$thum_height = 292; // 썸네일 세로크기
$img_cols = 4; //썸네일 가로 개수

// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
add_stylesheet('<link rel="stylesheet" href="'.$skin_url.'/style.css" media="screen">', 0);

?>
<!--PC 용--> <?php if(!G5_IS_MOBILE) { ?>
<script>
window.onload = function() {
<?php for ($i = 0; $i < count($list); $i++) : ?>
// 종료 시간 설정 (UNIX 타임스탬프 형식으로)
var end_time_<?php echo $i; ?> = <?php echo strtotime($list[$i]['wr_2']); ?>;

// 카운트다운 업데이트 함수
function updateCountdown_<?php echo $i; ?>() {
var current_time = Math.floor(Date.now() / 1000); // 현재 UNIX 타임스탬프
var remaining_time = end_time_<?php echo $i; ?> - current_time; // 종료 시간까지 남은 시간 (초)

var days = Math.floor(remaining_time / (60 * 60 * 24));
var hours = Math.floor((remaining_time % (60 * 60 * 24)) / (60 * 60));
var minutes = Math.floor((remaining_time % (60 * 60)) / 60);
var seconds = remaining_time % 60;

// HTML 업데이트
if(seconds <= 0 && minutes <= 0 && hours <= 0 && days <= 0){
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<i class='fa fa-hourglass' aria-hidden='true'> </i> 종료된 경매";
}else if(minutes == 0 && hours == 0 && days == 0){
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<font color='#FF0000'><i class='fa fa-hourglass-3' aria-hidden='true'> </i> " + seconds + "초 남음";
}else if(hours == 0 && days == 0){
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<font color='#FF6600'><i class='fa fa-hourglass-2' aria-hidden='true'> </i> " + minutes + "분 " + seconds + "초 남음";
}else if(days <= 0){
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<i class='fa fa-hourglass-2' aria-hidden='true'> </i> " + hours + "시간" + minutes + "분 남음 ";
}else {
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<i class='fa fa-hourglass-1' aria-hidden='true'> </i> " + days + "일 " + hours + "시간 남음";

}

}
// 매 초마다 카운트다운 업데이트
setInterval(updateCountdown_<?php echo $i; ?>, 1000);

// 페이지 로드 시에도 한 번 업데이트
updateCountdown_<?php echo $i; ?>();
<?php endfor; ?>
};
</script>
<!--PC 용--> <?php } ?>


<!--모바일 용--> <?php if(G5_IS_MOBILE) { ?>
<script>
window.onload = function() {
<?php for ($i = 0; $i < count($list); $i++) : ?>
// 종료 시간 설정 (UNIX 타임스탬프 형식으로)
var end_time_<?php echo $i; ?> = <?php echo strtotime($list[$i]['wr_2']); ?>;

// 카운트다운 업데이트 함수
function updateCountdown_<?php echo $i; ?>() {
var current_time = Math.floor(Date.now() / 1000); // 현재 UNIX 타임스탬프
var remaining_time = end_time_<?php echo $i; ?> - current_time; // 종료 시간까지 남은 시간 (초)

var days = Math.floor(remaining_time / (60 * 60 * 24));
var hours = Math.floor((remaining_time % (60 * 60 * 24)) / (60 * 60));
var minutes = Math.floor((remaining_time % (60 * 60)) / 60);
var seconds = remaining_time % 60;

// HTML 업데이트
if(seconds <= 0 && minutes <= 0 && hours <= 0 && days <= 0){
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<i class='fa fa-hourglass' aria-hidden='true'> </i> 종료된 경매";
}else if(minutes == 0 && hours == 0 && days == 0){
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<font color='#FF0000'><i class='fa fa-hourglass-3' aria-hidden='true'> </i> " + seconds + "초";
}else if(hours == 0 && days == 0){
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<font color='#FF6600'><i class='fa fa-hourglass-2' aria-hidden='true'> </i> " + minutes + "분 " + seconds + "초";
}else if(days <= 0){
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<i class='fa fa-hourglass-2' aria-hidden='true'> </i> " + hours + "시간" + minutes + "분";
}else {
document.getElementById('countdown_<?php echo $i; ?>').innerHTML = "<i class='fa fa-hourglass-1' aria-hidden='true'> </i> " + days + "일 " + hours + "시간";

}
}
// 매 초마다 카운트다운 업데이트
setInterval(updateCountdown_<?php echo $i; ?>, 1000);

// 페이지 로드 시에도 한 번 업데이트
updateCountdown_<?php echo $i; ?>();
<?php endfor; ?>
};
</script>
<!--모바일 용--> <?php } ?>
아뇨...올려주신 소스부분중에 수정할 부분을 알려드린겁니다. 어디를 수정할지 전혀 이해를 못하신 상황 인것 같은데..스킨에다 적용할 생각을 하는분에게 이걸 이해 시킬만큼의 실력은 안되는것 같습니다. 죄송합니다
2024-03-07 (목) 07:07:00
Copy
sql_query(" delete from `{$g5['scrap_table']}` where wr_2 < date_add(now(), interval -30 day) ");

위의 내용을 원하는 위치에 포함 시키면 언제나 오늘기준 (now()) 30일 이전의 스크랩은 모두 삭제가 될 것입니다.
index.php 파일에 포함시키거나 
extend 폴더의 파일에 넣거나 헤드 파일에 넣을 수도 있을 것이니다.

답변에 대한 댓글 2개

백지로 나오네요 ㅠㅠ
스크랩테이블에 wr_2 칼럼을 생성해 줘야 하고
스크랩 할 때 값도 넘겨서 입력되도록 해야 할 것입니다.

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