글 안쓴 날들 계산하여 포인트 삭감처리 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

글 안쓴 날들 계산하여 포인트 삭감처리 정보

글 안쓴 날들 계산하여 포인트 삭감처리

본문

설명..
==========================
포인트가 10,000점인 회원님께서 15일동안 원글이든 코멘트든 하나도 쓰지 않고 16일째 되는 날
로그인 하셨다면 1일당 포인트(10,000)의 1/100에 해당하는 100점 x 15일 = 1500 점에 해당하는
포인트가 삭감됩니다. 18일째 되는 날 로그인 하셨다면 100 x 17 = 1700점 삭감되겠죠.
15일째 되는 날 로그인 하시면, 별탈 없으십니다. 행운(?).. 바로 글부터 쓰셔야 겠죠.

15일이 지났을때에만 기능이 작동합니다. $limit_day = 15 이 부분을 수정하면 몇일이 지난
경우부터 적용시킬지 정할 수가 있습니다.

현재는 1일당 (포인트/100)으로 되어 있는데요. 아래 소스의 $dp 부분을 적절히 수정하시면
1일당 삭감될 포인트값을 정의 하실 수 있습니다. 적절히 수정하시면 되겠습니다.

글안쓴 날이 너무 길어서, 삭감 처리 후 포인트 잔고가 마이너스가 되는 경우엔
포인트 초기화 지원금을 주도록 하였습니다. 현재 100포인트로 초기화 되도록 셋팅되어
있습니다. 이 부분은 $reset_point = 100; 를 적절히 수정하시면 됩니다. 비율로 줄이게
되어 있어서 그럴리는 없겠구요. 혹시나 비율이 아닌 $dp를 절대값으로 적용하실 경우에
필요합니다.

포인트 삭감 후.. 계속 글 하나도 안쓰고 다시 로그인하면 삭감처리가 계속 이루어 질
것입니다. 0에 가깝게 계속 내려가겠죠.

현재 관리자가 아니고 랩이 7 아래일때만 적용되도록 해놓았습니다. 수정하시려면,
if (!$is_admin && $mb[mb_level] < 7 ) 이 부분을 수정하시면 됩니다.

포인트 처리사항은 포인트 내역에 기록됩니다.

※포인트가 활동에 중요한 역활을 하는 경우라면..
1.적절히 조정하지 않으면 너무 심한 압박이 될 수도 있으므로 주의해야 합니다.
2.글쓰기 활동이 거의 없는 회원들의 포인트가 고스란히 쌓여 있는 것에 제제를 가합니다.


↓작업시작
==========================
1.
extend/xxx.php라는 파일이 있다고 가정하고, 그 안에 아래 소스를 삽입하시면 되겠습니다.
아래 내용은 전체소스입니다. 필요한 부분만 취하셔도 되겠습니다.

<?
if (!defined("_GNUBOARD_")) exit; // 개별페이지 접근불가


<!--소스삽입시작-->

//마지막 글쓴날을 계산하여 포인트 감소처리 - 회원전용
//사용위치는 login_check.php
//예) nowrite_minus_point($mb[mb_id]);
function nowrite_minus_point($mb_id) {

global $g4;
global $is_admin;

    if ($mb_id) {
        $mb = get_member($mb_id);
        if (!$is_admin && $mb[mb_level] < 7) {

            //최신글DB에서 정보를 가져온다.
            $sql_my = " select bo_table from $g4[board_table] ";
            $result = sql_query($sql_my);
           
            for ($i=0; $row=sql_fetch_array($result); $i++)
            {
                $tmp_write_table = $g4[write_prefix] . $row[bo_table];
                //회원의 마지막 등록글 날짜가져오기
                $row2 = sql_fetch_array(sql_query(" select wr_datetime from $tmp_write_table where mb_id = '$mb[mb_id]' order by wr_datetime desc limit 1"));

                if ($row2[wr_datetime]) {
                    //회원 최종 글쓴지 몇일 지났는지.. (-1은 당일 안포함한다는 뜻.)
                    $sql_my2 = " select (TO_DAYS('$g4[time_ymdhis]') - TO_DAYS('$row2[wr_datetime]') - 1) as days ";
                    $row3 = sql_fetch($sql_my2);
                    $mb_write_after = $row3[days];
                   
                    $arr[] = $mb_write_after; //기록
                } else {
                  $arr[] = 999999; //한번도 글작성 안한 경우 기록
                }
            }
            asort($arr); //가장 작은 값을 찾기 위해 올림차순 정열
            array_splice($arr, 1); //제일 첫번째 값만 남기고 나머지 배열값들은 잘라버린다.
            $mb_write_after_result = $arr[0]; //가장 마지막으로 글작성 후 지난 날 수
            //======
            //$dp = 500; //★1일당 감소할 포인트값(단위)
            $dp = number_format($mb[mb_point] / 100,'','',''); //★1일당 감소할 포인트값(단위) - 소수점이하 반올림후 제거 콤마(,) 없이
            $reset_point = 100; //초기화 포인트값 (지원금)
            $minus_point = $mb_write_after_result * $dp * (-1); //1일당 -$dp씩 감소
           
            // 잔고가 마이너스 될 경우 포인트 초기화 지원금
            if (($mb[mb_point] + $minus_point) <= 0) {
                $minus_point = ($mb[mb_point] * (-1)) + $reset_point; //초기화를 위한 지원금 적용
            }
            $limit_day = 15; //★몇일 글 안쓰면 적용할지..
            if ($mb_write_after_result >= $limit_day && $minus_point) {
                insert_point($mb[mb_id], $minus_point, "{$limit_day}일 이상 글작성을 안 해 포인트감소", '', '', ''); //포인트감소
                $ment = "{$limit_day}일 이상 글작성을 안 해 {$minus_point} 포인트가 감소되었습니다.\\n\\n1) {$limit_day}일 이상일때만 적용하며, 1일당 {$dp}포인트씩 감소됩니다.\\n2) 전체포인트가 0보다 작아지면 {$reset_point}으로 자동초기화 됩니다.";
                echo "<script language='JavaScript'>alert(\"{$ment}\");</script>";
            }
        }
    }
    return;
}

<!--소스삽입끝-->

?>
==========================
2.
bbs/login_check.php 화일을 여시고
제일 마지막 줄의 goto_url($link); 윗 줄즘에..


nowrite_minus_point($mb[mb_id]); //★글 안쓴 날들 계산하여 포인트 삭감처리
goto_url($link);

위와 같이 삽입하시면 되겠습니다.


원본 소스를 건드리고 싶지 않으시다면,
멤버스킨/login_check.skin.php 생성하여 넣으셔도 문제 없을 듯 합니다.

※로그인 채크시 한번만 적용될 것입니다.
==========================
↑작업끝
추천
1

댓글 6개

글을 읽어보고 바로 리플 답니다.

이거 아주 좋은 팁이군요..감사합니다.
포인트로 홈페이지를 돌리는데..일일포인트제한을 걸지못해서 난감했는데
이방법으로 '접속날짜'를 기준으로 포인트를 삭감하는 방법을 쓰면 되겠군요..

궁금한거 한가지는... 소스를 건드리지 않는다면
말씀하신거 처럼..'멤버스킨'에

login_check.skin.php  파일만 생성하면 되는지요?

[응용 예]
-------------------------------------------------------------------------------------------------------------
현재 extend 폴더에 log_check.lib.php 라는 파일명으로 위 소스를 넣고
login_check.skin.php 에

nowrite_minus_point($mb[mb_id]); //★글 안쓴 날들 계산하여 포인트 삭감처리
goto_url($link);
-------------------------------------------------------------------------------------------------------------


위처럼만 해주면 되는지요?
log_check.php 안에 login_check.skin.php가 goto_url($link);위쪽에 인쿠르드 되어야 당연히 되겠구요.
이미 기본소스에 그리 되어 있자나요.

그럼 login_check.skin.php 이거 안에다가

nowrite_minus_point($mb[mb_id]); //★글 안쓴 날들 계산하여 포인트 삭감처리
↑요거만 넣어도 되겠습니다.

만드신 log_check.lib.php 요게 extend 폴더에 들어 있을 경우는 위처럼만 하면 되겠고,
lib폴더에 넣고 하려면

nowrite_minus_point($mb[mb_id]); //★글 안쓴 날들 계산하여 포인트 삭감처리
↑요거 위쪽에 log_check.lib.php 인쿠르드 해줘야 겠죠.


로그인 안한 날로 포인트 감소처리 하는건 아래 링크 참조해 보세요
 http://sir.co.kr/bbs/tb.php/g4_tiptech/2356
죄송한데요...이팁적용해서 잘 사용하고 있는데...
오늘에서야 확인이 된건데....오늘 오전에 가입하고 로그아웃했다가 오후에 로그인 하면 30일동안 글작성이 없어 포인트가 삭제된다고 하네요...

참고로 저는 30일을 설정했거든여.....오늘 가입했는데....어찌 이런일이 생길수가.....
어떻게 해결해야 될지 도움부탁드립니다...
전체 133 |RSS
그누4 팁자료실 내용 검색

회원로그인

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