오늘 회원가입수, 주문수 자동으로(?) 출력

오늘 회원가입수, 주문수 자동으로(?) 출력

QA

오늘 회원가입수, 주문수 자동으로(?) 출력

본문

https://sir.kr/yc5_skin/1762

위 게시글의 팁을 참고해서 오늘 ?? 수 를 모듈화(?) 함수화(?) 시켜서 출력하고 있습니다.


<?php
if( ! function_exists(today_count) ) {
    function today_count($type) {
        global $g5;
        if( !$type ) return;
        switch($type) {
            case '주문건':
                $table = $g5['g5_shop_order_table'];
                $where = 'od_time';
                $add = ' and od_status != "취소" ';
                // $sql = " select count(*) as cnt from {$g5['g5_shop_order_table']} where od_time between '".G5_TIME_YMD." 00:00:00' and '".G5_TIME_YMD." 23:59:59' and od_status != '취소' ";
                break;
            case '가입자':
                $table = $g5['member_table'];
                $where = 'mb_datetime';
                // $sql = " select count(*) as cnt from {$g5['member_table']} where mb_datetime between '".G5_TIME_YMD." 00:00:00' and '".G5_TIME_YMD." 23:59:59' ";
                break;
        }
        $sql = " select count(*) as cnt from {$table} where {$where} between '".G5_TIME_YMD." 00:00:00' and '".G5_TIME_YMD." 23:59:59' {$add} ";
        $row = sql_fetch($sql);
        $cnt = $row['cnt'];
        return $cnt ? "(오늘".$type." <strong>".number_format($cnt)."</strong>)" : "";
    }
}

 

이런식으로 구현이 되는데요. 추후에 다른 데이터로 오늘 ?? 수 를 가져와야할 경우도 고려해서 함수화 시켰습니다. 딱히 가입자, 주문건 말고는 쓰일데가 문의, 후기...등등 많진 않아서 앞에 말한 가입자, 주문건 만 사용할 것 같기는 합니다.

 

여기서 궁금한 것은... 관리자>회원관리 또는 주문내역 페이지를 띄워놓은 상태에서 가입 또는 주문이 발생할 경우 새로고침없이 바로 출력이 되거나, $cnt 의 변화를 감지해서 자동으로 새로고침을 해줘서 출력시키거나...  0이 돼서 자동으로 사라지게 하는 방법이 있나요??

 

새로고침없이 띄우거나 변화를 감지해서 자동으로 새로고침해주게끔 편리하게 수정(개발)을 하려는 건 아니고, 단순히 방법이 있다면 어떤 식으로 처리되는지가 궁금합니다...

이 질문에 댓글 쓰기 :

답변 1

서버에 데이터를 화면에 뿌려준다면 가능합니다.


setInterval(() => {
    $.ajax({
        url: '데이터 보낼 주소'
        method: 'GET', 
        dataType: 'json', // 서버에서 반환할 데이터 형식
        success: function(response) {
            // 서버로부터 받은 데이터를 처리
            console.log(response);
            여기에 카운트 값을 바꿀 DOM 을 입력
          예) $(".total_count").text(response.count);
   
        },
        error: function(xhr, status, error) {
            // 오류를 처리
            console.error('데이터 가져오기 오류:', error);
        }
    });
}, 1000); // 1000ms = 1초

 

좀 여유있게 30초 60초 마다 한번씩 확인하는 방법을 통해서, 위에 작성했던 코드를 JSON 으로 출력 > 화면에  보여주시면 원하는데로 가능하실 것 같습니다.

답변 감사드립니다!! :)
개발자가 아니다보니 저도 setInterval 밖에 생각이 안나더라구요...
근데 setInterval은 뭐 5분간격이든 10분간격이든 텀을 늘려서 처리한다해도 효율성이 떨어질 것 같아서... 혹시나 스크립트말고 개발쪽에서 처리하면 인터벌보다는 효율적이지 않을까 싶어서 여쭤봤습니다ㅠ
크론탭도 생각해봤는데 뭔가 setInterval이랑 비슷한 느낌이기도 하고..;;

말씀해주신 setInterval 이나 크론탭으로 결국 값의 변화를 체크해야해서 주기적으로 돌려주는 방법밖에는 없나보네요!

CSR / SSR 의 이해가 필요합니다.

지금 그누보드는 기본적으로 SSR 기반입니다.

서버사이드 랜더링이라고 해서, 기본적으로 서버에서 명령어를 다 처리 한 다음 화면에 보여주는 형태입니다.

CSR은 클라이언트 사이드 랜더링인데 조금 이해를 돕기 위해, 우리 유튜브 사이트 처음 들어가면 바로 안보이고 뭔가 화면이 회색으로 보이다가 갑자기 데이터가 나타나죠? 그거에요

쨋든 SSR의 경우는 완성된 데이터라서 언급하신 "실시간 감지"라는 거 자체를 할 수 없습니다.
그래서 최선의 방법은 주기적으로 서버와 통신해서 하는 방법 밖에 없다는 것이였습니다.

언급하신데로 인터벌이던 크론탭이던 CSR이던 어떻든 "무조건 서버와의 통신은 필수"입니다.
애초에 바꼈다라는 데이터는 서버가 가지고 있기 때문이죠.

클라이언트 즉 내 컴퓨터에서 보는 화면에서는 그걸 실제로 제어할 수 없습니다.

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

회원로그인

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