조회 수 107 댓글 17

배너클릭시 포인트를 지급하는 모듈인데..

 

이걸 초기화기준을 0시로 하고싶을때

 

portalpoint.model.php 파일의

 

61번째줄을 

 

$args->regdate = date("Ymd"); 이렇게 되있는걸

 

$args->regdate = date("Ymd000000"); 이렇게 바꿔주면 0시에 초기화가 되나요?

  • ?
    마신 2016.10.31 10:30:53

    사용해보지 않아서 모르지만 

    그위부분에 비교하는부분에서

    date("YmdHi" 이부분들을 date("Ymd" 이렇게 날짜까지만 비교하게 수정하면 되지 않을까요?

  • profile
    웹지기 2016.10.31 11:14:51
    저도 이거 궁금하네요. 다른 자료들은 모두 00시 초기화 되서 날 바뀌면 게임도 다시 하고 하는데 이 배너클릭만 시간 계산해야 하니 약간 매칭이 안되는 것도 있어서요..


    <?php
    /**
    * @class portalpointModel
    * @author 러키군 (admin@barch.kr)
    * @brief portalpoint 모듈의 Model class
    **/

    class portalpointModel extends portalpoint {
    /**
    * @brief 초기화
    **/
    function init() {
    }
    /**
    * @brief 모듈정보 가져옴
    **/
    function getConfig() {
    // 설정 정보 가져오기
    $oModuleModel = &getModel('module');
    $portal_config = $oModuleModel->getModuleConfig('portalpoint');
    if($portal_config->url_list) $portal_config->url_list = unserialize($portal_config->url_list);

    return $portal_config;
    }
    /**
    * @brief 해당포탈의 쿨타임이 지났는지 검사함
    * 클릭 안했을경우 false, 이미 했으면 true
    **/
    function todayClickCheck($member_srl,$obj) {
    if(!$obj['title']) return false;
    if(!$obj['delay']) return true;
    $obj['delay_type'] = (int)$obj['delay_type']; // 일,분

    // 이미 클릭한 로그정보가 있는지 체크함
    $args = null;
    $args->title = $obj['title'];
    $args->member_srl = $member_srl;
    $args->ipaddress_prefix = preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','$1.$2.$3', $_SERVER['REMOTE_ADDR']);
    $output = executeQuery("portalpoint.getLog",$args);

    // 로그가 없으면 그냥 false
    if(!$output->data) return false;

    $last_regdate = zdate($output->data->regdate,"Y-m-d H:i:s");
    $now = date("YmdHi");

    // 시간비교-분일때
    if($obj['delay_type']==1) $end_date = date("YmdHi",strtotime(sprintf("+%d minutes",$obj['delay']),strtotime($last_regdate)));
    else $end_date = date("YmdHi",strtotime(sprintf("+%d day",$obj['delay']),strtotime($last_regdate)));
    if($now > $end_date) return false;

    return true;
    }
    /**
    * @brief 클릭한회원의 오늘 획득포인트를 리턴
    **/
    function getTodayTotalPoint($member_srl) {
    $args = null;
    $args->member_srl = $member_srl;
    $args->ipaddress_prefix = preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','$1.$2.$3', $_SERVER['REMOTE_ADDR']);
    $args->regdate = date("Ymd");
    $output = executeQuery("portalpoint.getLogWithPoint",$args);

    $total_point = (int)$output->data->total_point;
    return $total_point;
    }
    }
    ?>
  • ?
    라그릿 2016.10.31 13:16:07
    배너 광고는 0시 초기화가 불가능한거려나요..
  • ?
    라그릿 2016.10.31 13:16:25
    획득 포인트를 리턴 부분을 수정하는게 맞는거같은데.. 아닌가..ㅠ
  • profile
    람보 2016.10.31 12:09:33
    해당부분은 그냥 오늘날자인지 아닌지만 채크하는 형태인듯 한데요.
  • ?
    라그릿 2016.10.31 13:14:51
    에!?
  • profile
    람보 2016.10.31 13:18:46
    웹지기님이 올리신 코드에서 나타난걸 보면, 단순히 getTodayTotalPoint 메서드의 역활은 오늘날자인지 아닌지 채크하기 위해서 getLogWithPoint.xml에 작성된 xml쿼리문을 읽어들이고 그 값을 $total_point = (int)$output->data->total_point; 으로 해당 데이터의 오늘 토탈포인트를 반환하는 과정을 거치고 있어요.

    따라서 오늘날자에 해당 회원의 흭득한 포인트를 검사하는 용도로 보여지고, 실제로 초기화쪽을 담당하는 쪽은 다른구간이 아닌가 생각되는데요.

    실제로 phpinfo 에서 date의 타임존 설정이 Asia/Seoul 으로 지정되어있음에도 불구하고 뭔가 초기화쪽이 이루어지지 않았다면 그 해당 액션전체를 봐야하는 문제라 다른사람이나 일반 XEtown에서 상주하고 계신분들이 답변드리기 부담스러운 질문이 되어버린거죠..

    그리고 설정하신 date('Ymd') 에 마지막 숫자를 추가하는 방법은
    date('Ymd').'000000'; 이렇게 추가할 수 있습니다...
  • ?
    라그릿 2016.10.31 13:20:56
    아, 그렇군요.. 아이템샵 0시 초기화는 몇부분만 수정하길래 비슷한건줄 알았는데 아니였나보네요.
    답변 감사합니다.
  • profile
    웹지기 2016.10.31 13:21:05

    현재는 모듈에서 1일로 제한하면 마지막 클릭시간을 체크한 다음  24시간이 지나지 않았다면 포인트를 지급하지 않고있어요. 이걸 0시가 되면 포인트적립을 허용하고 싶다는것이죠.

  • ?
    라그릿 2016.10.31 13:29:45
    그런거죠..

    가위바위보나 복권같은건 0시가 되자마자 딱 초기화 되는데 배너는 안되서..
    검색을 해보니 아이템샵도 구입제한이 하루기준으로 계산되는걸 0시기준으로 바꿀수있길래 비슷한가 해서 질문을 한거죳! ㅎㅎ
  • profile
    웹지기 2016.10.31 15:45:05

    // 시간비교-분일때
    if($obj['delay_type']==1) $end_date = date("YmdHi",strtotime(sprintf("+%d minutes",$obj['delay']),strtotime($last_regdate)));
    else $end_date = date("YmdHi",strtotime(sprintf("+%d day",$obj['delay']),strtotime($last_regdate)));
    if($now > $end_date) return false;



    if($now > $end_date) return false; <-- 이부분이 연관이 있을까요? 현재시간과 마지막시간을 비교해서 동작하는 것 같긴한데요...

     

     

     

     

    $now = date("YmdHi");   --->  Hi  를 빼버리고..

    $end_date = date("YmdHi",strtotime(sprintf("+%d day",$obj['delay']),strtotime($last_regdate))); 

    --> 여기서도 Hi 를 빼버리면

     

    어찌 될까요??

  • profile
    웹지기 2016.10.31 15:57:10

    아니면... 흠...

     

     $now = date("YmdHi");

     

    // 시간비교-분일때
                if($obj['delay_type']==1) $end_date = date("YmdHi",strtotime(sprintf("+%d minutes",$obj['delay']),strtotime($last_regdate)));
                else $end_date = date("YmdHi",strtotime(sprintf("+%d day",$obj['delay']),strtotime($last_regdate)));
                if($now >= $end_date) return false;

                return true;

     

    요건 어떨까요......

  • profile
    웹지기 2016.10.31 17:28:18
    일단 이렇게 수정해 놓고 오늘 밤 12시에 테스트 해 보겠습니다.
  • ?
    라그릿 2016.10.31 17:37:03
    헛 저도 해봐야겠네요.
  • profile
    웹지기 2016.11.01 00:21:05
    테스트해보니 잘 되네요. 어차피 하루 1회로 해서 쓸꺼면 이렇게 수정해서 쓰면 될거 같네요.
  • ?
    라그릿 2016.11.01 00:56:49
    오우 오우 저도 잘되네요 !
    감사합니다 !
  • profile
    다이오니 2016.11.01 02:21:57
    옷.. 저도 필요했는데 감사합니다!

서버에 요청 중입니다. 잠시만 기다려 주십시오...