게시판 wr_10 (이벤트 종료 날짜) 의 값이 지난 경우 자동으로 분류 업데이트

게시판 wr_10 (이벤트 종료 날짜) 의 값이 지난 경우 자동으로 분류 업데이트

QA

게시판 wr_10 (이벤트 종료 날짜) 의 값이 지난 경우 자동으로 분류 업데이트

본문

제목 그대로 wr_10 에는 날짜데이터가 담겨있습니다. ex)20201214   이런 형식의 날짜데이터

 

wr_10 은 이벤트 종료 날짜입니다. 

 

오늘 날짜가 종료 날짜보다 큰 경우 해당 게시글의 분류를 '진행중' 에서 '종료' 로

 

자동 업데이트가 되게 구현하려고 합니다.

 

리스트 페이지 접속시 실행될 쿼리를 짰는데요;;

 

생각해낸게 list.skin.php 파일에서 $list[$i]['wr_10'] 을 가져오고,

 

$today = str_replace('-', '', G5_TIME_YMD); 로 오늘 날짜를 가져와서

 

두 날짜를 비교해서 '진행중'인 게시글중 종료날짜가 지났으면 ca_name 을 '종료' 로 업데이트를 시켰는데

 

list.skin.php 파일에서 하는게 맞나요?? 지금 당장이야 테스트 게시글로 하는거라 상관없다지만

 

게시글이 많아질 경우에 리스트 페이지를 진짜 오랜만에 접속하는 경우 다량의 업데이트가 발생할텐데

 

이런 경우 생길 이슈...등등을 고려했을때 어느 페이지에서 업데이트 쳐주는 작업을 하시나요??ㅠㅠㅠ

 


<?php for ($i=0; $i<count($list); $i++) {
    $classes = array();
    $classes[] = 'gall_li';
    $classes[] = 'col-gn-'.$bo_gallery_cols;
    if( $i && ($i % $bo_gallery_cols == 0) ){
        $classes[] = 'box_clear';
    }
    if( $wr_id && $wr_id == $list[$i]['wr_id'] ){
        $classes[] = 'gall_now';
    }
    $today = str_replace('-', '', G5_TIME_YMD); // 오늘 날짜
    if( $list[$i]['wr_10'] < $today ){ // 종료 이후 분류 자동 업데이트
        /*
        현재 종료 날짜(wr_10)가 지났고, 진행중 카테고리인 게시글은 자동으로 종료 카테고리로 업데이트
        */
        $sql = " update {$write_table} set ca_name = '종료' where ca_name = '진행중' and wr_10 < {$today} ";
        sql_query($sql);
    }
 ?>

이 질문에 댓글 쓰기 :

답변 4

그누보드 config 테이블의 cf_10 에 실행 날짜 정보를 기록하고,

cf_10 날짜 정보가 오늘과 다를 경우 실행시키면 1일 1회만 실행됩니다.

list.skin.php 에 넣어도 됩니다.

 

if ($config['cf_10'] != date('Y-m-d')) {

  // (업데이트문)

  $sql = "update {$g5['config_table']} set cf_10 = '" . G5_TIME_YMD . "' ";

  sql_query($sql);

}

음... 답변 감사드립니다... 각 게시글마다 종료날짜를 다르게 두고 있어서 이걸 일일이 체크하기 위해 리스트 스킨에서 사용한건데... 제가 이해한게 맞는지 모르겠지만...

각 게시글의 종료날짜를 체크해서 게시글 분류를 '진행중' 에서 '종료'로 업데이트 칠때 config 의 여분필드에도 오늘 날짜로 업데이트 시키고 config의 여분필드의 날짜와 오늘 날짜가 다를 경우 실행시키면 한번만 적용된다는걸 설명해주시려는게 맞나요??ㅠㅠ

게시글마다 update 를 수행하는 방법보다는..

1일 1회 1 SQL 로 한번에 모두 update 하는 방식을 추천하겠습니다.

for 문 안에서 sql 실행은 빼고, 상단으로 올리면 됩니다.
실행날짜 기록 조건을 주면.. 1일 1회만 실행시킬 수 있습니다.

if ($config['cf_10'] != date('Y-m-d')) {

  // (업데이트문)
$sql = "
update {$write_table}
    set ca_name = '종료'
 where ca_name = '진행중'
  and wr_10 < {$today}
";
sql_query($sql);

// 실행날짜 정보 기록
  $sql = "update {$g5['config_table']} set cf_10 = '" . G5_TIME_YMD . "' ";

  sql_query($sql);

}

상세하게 알려주셔서 감사드립니다! 저도 한번 최초 접속시 모든 게시글의 종료날짜를 체크해서 한번에 업데이트 치는걸 원했던건데... 그럼 또 상단에서 모든게시글의 종료날짜를 불러와서 체크해서 업데이트 쳐야하는건지... 어찌해야하나 싶었는데 직접 쿼리까지 짜주셔서 감사합니다ㅠㅠㅠ

크론으로 설정하시면 됩니다.

서버인경우 크론을 직접 설정가능하고 웹호스팅인경우 호스팅사마다 다릅니다.

 

https://jdm.kr/blog/2

 

=> 특정시간에 특정행동을 반복할수 있습니다.

=> 알려주시건 해당 기능을 하는 화일을 하나 만들고 매일자정마다 실행하게 하면 됩니다.

 

구글에서 온라인 크론탭 으로 검색해보시면 무료로 지원하기도 합니다

답변 감사드립니다...ㅠㅠㅠ 크론도 들어는 봐서 알긴하나;; 제가 개발자가 아니어서 ㅠㅠㅠ 크론을 돌릴 정도의 실력이 안됩니다ㅠㅠㅠ 심지어 웹호스팅 서버를 이용중입니다;;

그래서 페이지 접속시 실행하는 방법을 생각했던거였거든요ㅠㅠㅠ

아니면 extend 에 업데이트 칠 소스를 구현해서 돌리면 페이지 불문... 어느 페이지를 접속하던 접속시 최초 1회는 무조건 계속 돌겠죠...?? 흠...ㅠㅠ 고민이네요;;ㅠ

날짜면 하루에 한번만 체크 하면 될테니 따로 테이블을 만드셔서 체크할때 날짜를 넣고 하루에 한번 실행 누군가 게시판에 접속했을때 실행하시면 될거 같습니다.

위에 말씀하신 서버제로님 말씀과 비슷한 개념이라고 보시면 될거 같습니다.

답변 감사드립니다. 설명해주신 부분을 좀 보완하자면 아래 답변추가된 님께서 말씀해주신 부분이랑 비슷한 맥락인거 같네요!! 어제 봤을땐 이해를 잘 못했었는데 마르스컴퍼니 님의 답변도 보고 다시 보니 이해가 됩니다!! 감사합니다!!

호스팅 서비스를 어디서 쓰시는지는 모르겠지만

 

https://blog.cafe24.com/733

 

카페24 같은경우 관리자에서 클릭만으로 설정이 가능해서 예전에 설정해준적이 있는거 같습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 168
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT