팁과노하우

2025.01.15 15:43

게시판 내 일정 확률로 보너스 포인트 지급 하기

안녕하세요...

미니님a 회원입니다.


먼저 해당 팁은 그누보드 배포사이트인 SIR에도 작성하지 않고 오직 리빌더에만 작성하는 팁이며,

기존에 SIR에 업로드 된 스킨 버그 수정된 버전입니다.


※ 본 팁은 손수 작성한 팁이며, 창작으로 제작된 기능이므로, 다른 곳에 퍼가실 땐 반드시 제 닉네임을 작성해주시길 바랍니다. 

이는 최소한의 매너입니다. 

그럴 일은 없겠지만, 진짜 진짜 만약에 발견되면, 팁 공유에 대한 고민이 ...생기............


자!!!  RB 기본 스킨을 이용하면서,

아 사용자에게 보너스 포인트 지급을 하고 싶은데 방법이 없을까? 하셨을 운영자님은 안계신가요 ?^^;


해당 내용은 스킨과 연계됩니다. 

잘 몰라서 스킨을 변경하실꺼면 아래 링크에서 스킨을 그대로 적용하시면 되며,

이미 스킨이 상당히 커스터마이징이 많이 된 상태인 경우 해당 팁만 적용이 가능합니다.

https://rebuilder.co.kr/userdata/280


이런 느낌으로 동작합니다.


92cb0a4431cc296878f89f679526fd1a_1736923772_5857.png
 


글 그리고 댓글 모두 적용할 수 있습니다.


1. 사용하시는 게시판 설정으로 들어가주세요

그리고 맨 하단에 다음과 같이 추가 해주세요


92cb0a4431cc296878f89f679526fd1a_1736923551_4286.png 

참고로 여분 필드 9번과 10번을 사용하고 있습니다.

혹시라도, 다른 번호를 사용해야 한다면 아래 코드에서 변경 해주십시요.



여분필드 9: 글확률/댓글 확률입니다.

여분필드10: 글최소~글최대 / 댓글최소~댓글최대입니다.


따라서 여분필드 9번의 경우 2개의 데이터 10번의 경우 4개의 데이터가 있어야 정상 동작합니다.

만약 고정된 포인트를 지급하실려면 4개의 값을 고정해주세요 혹은 2개 2개씩

예) 글 100포인트 / 댓글 50포인트


100,100,50,50 으로 저장하시면 됩니다.



자! 이제 수정하러 가봅시다.


사용하시는 게시판 스킨 write_update.skin.php 파일을 열어 아래 코드를 넣어주세요


    $bo_9_values = explode(',', $board['bo_9']);
    $bo_10_values = explode(',', $board['bo_10']);
    $probability = $bo_9_values[0]; 
    $randomNumber = mt_rand() / mt_getrandmax();


    $point_rand = rand($bo_10_values[0], $bo_10_values[1]);


    if ($w == "" && $randomNumber <= $probability){
        insert_point($member['mb_id'], $point_rand, "{$board['bo_subject']} {$wr_id} 글쓰기 보너스 포인트", $bo_table, $wr_id, '글쓰기보너스');
    } 

잘 모르겠다 하시면 아래 스샷 참조 하시길 바랍니다.



92cb0a4431cc296878f89f679526fd1a_1736923674_1807.png
 


자 그다음 댓글 보너스 포인트 지급을 위해 write_comment_update.skin.php 파일을 열어 아래 코드를 추가 해주세요



$bo_9_values = explode(',', $board['bo_9']);
$bo_10_values = explode(',', $board['bo_10']);
$probability = $bo_9_values[1]; 
$randomNumber = mt_rand() / mt_getrandmax();


$point_rand = rand($bo_10_values[2], $bo_10_values[3]);


if ($w == "c" && $randomNumber <= $probability){
    insert_point($member['mb_id'], $point_rand, "{$board['bo_subject']} {$wr_id}#{$comment_id} 댓글쓰기 보너스 포인트", $bo_table, $comment_id, '코멘트보너스');
} 

마찬가지로 난 잘 모르곘다? 하시면 위치는 아래 스샷 참조 하시길 바랍니다.



92cb0a4431cc296878f89f679526fd1a_1736923674_2437.png
 




자! 이제 1/3 왔네요, 이제 화면에 보여줄 차례입니다.

view.skin.php 파일을 열어서 다음 코드를 찾아주세요



<?php echo get_view_thumbnail($view['content']); ?>
    </div>

그리고 그 아래에 해당 코드를 넣어주세요



<?php 
        
        $point_sql = "SELECT * FROM `{$g5['point_table']}` WHERE po_rel_table = '{$bo_table}' and po_rel_id = '{$wr_id}' and po_rel_action = '글쓰기보너스' ";
        $result_point = sql_fetch($point_sql);
        if($result_point) { ?>


            <p class="text-xs" style="font-weight: 500;  font-size: 0.75rem; line-height: 1.25rem; padding: 0.625rem 1.25rem; padding-left:0;  border-radius: 0.5rem; margin-bottom: 0.5rem; margin-top: 1rem;"> 축하합니다. 보너스 <span style="font-weight:bold;"><?php echo $result_point['po_point']; ?></span>포인트를 획득 하였습니다.</p>
        <?php } ?>


마찬가지로 난 잘 모르겠는데? 하시면 아래 스샷 참조 하시면 됩니다.


92cb0a4431cc296878f89f679526fd1a_1736923674_3081.png
 



이제 댓글에도 남겨야죠 ?? 

댓글은 view_comment.skin.php 파일을 열어서 다음 코드를 찾아주세요



 <?php if($is_comment_reply_edit) {
	                if($w == 'cu') {
	                    $sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
	                    $cmt = sql_fetch($sql);
                        if (isset($cmt)) {
                            if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) {
                                $cmt['wr_content'] = '';
                            }
                            $c_wr_content = $cmt['wr_content'];
                        }
	                }
				?>            
	            <?php } ?>


이 코드 아래에 해당 코드를 넣어주세요


 <?php 
                 $point_sql = "SELECT * FROM `{$g5['point_table']}` WHERE po_rel_table = '{$bo_table}' and po_rel_id = '{$comment_id}' and po_rel_action = '코멘트보너스' ";
                 $result_point = sql_fetch($point_sql);
                if($result_point) { ?>


<p class="text-xs" style="font-weight: 500;  font-size: 0.75rem; line-height: 1.25rem; padding: 0.625rem 1.25rem; padding-left:0;  border-radius: 0.5rem; margin-bottom: 0.5rem; margin-top: 1rem;"> 축하합니다. 보너스 <span style="font-weight:bold;"><?php echo $result_point['po_point']; ?></span>포인트를 획득 하였습니다.</p>
<?php } ?>


이것도 아래 스샷 참고 하시면 위치는 확인 되실 것입니다.



92cb0a4431cc296878f89f679526fd1a_1736923674_3737.png
 



여기까지 오셨다면 아래 기능은 추가가 완료 되었지만, 문제점이 하나 발생합니다.

바로 글이나 댓글 삭제 시 보너스 포인트가 회수가 안된다는 버그인데요


이제 그 부분도 해결해보겠습니다.

리빌더 기본 스킨에는 해당 파일이 기본적으로 없습니다.

따라서 파일명 잘 보시고 직접 생성하셔야 합니다.


만약 해당 파일이 있다면 코드만 넣어주세요


먼저 글삭제 파일 delete.skin.php 파일을 생성 해주세요


그리고 아래 코드를 넣어주세요


<?php


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


// 글쓰기 보너스 포인트 회수
$sql_point = "SELECT * FROM `{$g5['point_table']}` WHERE po_rel_table = '{$bo_table}' and po_rel_id = '{$wr_id}' and po_rel_action = '글쓰기보너스' ";
$result_point = sql_fetch($sql_point);


if($result_point) {
    insert_point($write['mb_id'], $result_point['po_point'] * (-1), "{$board['bo_subject']} {$write['wr_parent']} 글삭제", $bo_table, $wr_id, '글쓰기삭제');
}


// 해당 글의 댓글 보너스 포인트 회수
$sql = " select wr_id, mb_id from {$write_table} where wr_parent = '{$wr_id}' and wr_is_comment = 1 ";
$result = sql_query($sql);
while ($row = sql_fetch_array($result)) {
    $sql_comment_point = "SELECT * FROM `{$g5['point_table']}` WHERE po_rel_table = '{$bo_table}' and po_rel_id = '{$row['wr_id']}' and po_rel_action = '코멘트보너스' ";
    $result_comment_point = sql_fetch($sql_comment_point);
    
    if($result_comment_point) {
        insert_point($row['mb_id'], $result_comment_point['po_point'] * (-1), "{$board['bo_subject']} {$wr_id} 댓글삭제", $bo_table, $row['wr_id'], '댓글삭제');
    }
}


햐당 파일은 그냥 처음 만든 파일이라 걍 싹 다 복사해서 복붙하시면 됩니다.


이제 댓글 삭제 포인트 회수하러 갑시다.

delete_comment.skin.php 파일을 생성 해주세요

그리고 아래 코드를 전체 넣어주시면 끝입니다.



<?php


if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 
$sql_point = "SELECT * FROM `{$g5['point_table']}` WHERE po_rel_table = '{$bo_table}' and po_rel_id = '{$comment_id}' and po_rel_action = '코멘트보너스' ";
$result_point = sql_fetch($sql_point);


if($result_point) {
    insert_point($write['mb_id'], $result_point['po_point'] * (-1), "{$board['bo_subject']} {$write['wr_parent']}-{$comment_id} 댓글삭제", $bo_table, $wr_id, '댓글삭제');
}


그러면 아래 처럼가 잘 처리 될 것입니다.


92cb0a4431cc296878f89f679526fd1a_1736923674_4293.png




아래는 전체적으로 구동되는 움짤 영상입니다. 클릭 하시면 큰 화면에서 확인이 가능합니다.

고맙습니다.



 

92cb0a4431cc296878f89f679526fd1a_1736923690_2666.gif
 



  • 공유링크 복사
    미니홈 쪽지 구독하기
    구독하고 알림받기
구매 신청
  • 신용카드 결제는 별도상담을 통해 가능합니다.
    구매문의 : cs@false9.co.kr / 010-6466-3355
    신청 이후 담당자가 개별연락 드리고 있습니다.
    입금자명과 실제 입금자가 동일한 경우 자동처리 됩니다.
  • 결제예정 금액 : 0 (VAT별도)
    하나은행(KOEXKRSE) : 258-910104-00407 / 김은정(인덱스)

  •  
  • 신청 및 FCM 가이드
      안드로이드 웹앱 및 푸시알림을 사용하기위한 A-Z!
      잘 따라오시면 어렵지 않습니다.

      1. FCM (Firebase Cloud Messaging) 세팅하기

      1-1. 시작하기
      https://console.firebase.google.com?hl=ko 으로 접속하여 [시작하기] 를 클릭합니다. FCM은 구글계정이 있으면 무료로 사용 가능 합니다.




      1-2. 프로젝트 생성하기
      [프로젝트 시작하기] 를 클릭합니다.




      프로젝트의 이름을 설정합니다.
      앱이름(사이트명, 상호명)을 영문으로 입력하는것이 가장 좋습니다.
      입력하셨다면 [계속] 을 클릭해주세요.




      애널리틱스 사용설정을 활성화 해주시고(선택사항)
      [계속] 을 클릭해주세요.




      애널리틱스 위치를 [대한민국] 또는 거주국가를 선택하시고 약관 동의 후 [프로젝트 만들기] 를 클릭해주세요.




      프로젝트 생성이 완료 되었습니다. [계속] 을 클릭하시면 FCM메인페이지로 이동 합니다.




      1-3. 앱 생성하기
      이전 단계에서 프로젝트를 생성했습니다.
      이제 프로젝트안에 안드로이드 앱을 생성해보겠습니다.

      FCM 메인 중앙에 주황색 동그란 버튼이 3개 있습니다.
      가운데에 있는 (안드로이드 로고) 버튼을 클릭해주세요.




      버튼을 클릭하셨다면 앱등록 창이 오픈 됩니다.
      안드로이드 패키지 이름 및 앱 닉네임을 입력하세요.

      패키지 이름은 반드시 com.webview.앱영문명 으로 입력하셔야 합니다.
      com.webview. 를 반드시 넣어주셔야 합니다.
      입력 예) com.webview.rebuilder

      앱 닉네임은 사이트명이나 상호명, 앱이름 등을 입력해주시면 됩니다.
      디버그 서명은 입력하지 않아도 됩니다.

      입력을 마치셨다면 [앱등록] 을 클릭해주세요.
      다음페이지로 넘어간다면, 입력하신 패키지명 (com.webview.앱영문명) 을 메모장에 메모해주세요.





      [google-services.json 다운로드] 버튼을 클릭하셔서 파일을 다운받아 주세요.
      다운을 받으셨다면 [다음] 을 클릭해주세요.




      Groovy(build.gradle) 선택하신 후 [다음] 을 클릭해주세요.




      앱 생성이 완료 되었습니다.
      [콘솔로 이동] 을 클릭하시면 메인으로 이동 됩니다.




      1-4. 비공개 키파일 생성하기
      거의 다왔습니다. 조금만 더 힘내세요.
      저도 이거 작성하느라 무쟈게 힘들었습니다. 리빌더화이팅.

      화면 상단에 아까 입력하신 이름으로 앱이 생성된게 보이신다면,
      좌측 상단에 [프로젝트 개요] 메뉴 옆에 톱니바퀴 아이콘을 클릭하여
      [프로젝트 설정] 으로 이동해주세요.




      프로젝트 설정으로 오셨다면 상단 탭메뉴에서 [서비스 계정] 을 클릭하세요.





      화면 아래쪽에 있는 [새 비공개 키 생성] 을 클릭하세요.

      키파일은 버튼 클릭시 자동으로 다운로드 됩니다.
      중요한 파일이므로 파일을 타인에게 공개하거나 해서는 안됩니다.





      친절하게 중요한 파일임을 알려줍니다.
      [키 생성] 을 클릭하면 json 파일이 다운로드 됩니다.




      다운로드된 파일은 rebuilder-demo-a4cc0-firebase-adminsdk-au83h-41e4b5df03.json 과 같은식으로 저장됩니다.
      이름이 너무 긴 관계로 임의파일명으로 변경해주세요.
      가이드에서는 key.json 으로 설명하겠습니다.

      이제 준비는 모두 끝났습니다!
      바탕화면에 1-3에서 다운로드 했던 google-services.json 파일과,
      방금 이름을 변경했던 key.json 파일이 있다면 잘 하셨습니다. (파일아이콘은 무시해주세요. 다를 수 있습니다.)




      2. 리빌더 앱관리 설정하기

      2-1. 파일 업로드하기
      위 단계에서 이름을 변경했던 key.json 파일을 사용하시는 웹서버(웹호스팅)에 FTP 프로그램으로 접속하여 업로드 해주세요.
      업로드 위치는 /data/push/key.json 입니다.

      2-2. 앱관리 설정하기
      관리자모드 > 빌더설정 > 앱관리 메뉴로 이동해주세요.
      [앱관리] 메뉴가 없다면 리빌더 공식홈페이지 > 부가기능 다운로드 에서 [안드로이드 하이브리드 웹앱 + Push 알림] 기능을 다운로드 후 설치해주세요.
      바로가기 > https://rebuilder.co.kr/membership/30

      설치가 되셨다면 관리자모드 > 빌더설정 > 앱관리 메뉴로 이동해주세요.

      스크롤을 내리시면 [FCM 설정] 섹션이 있습니다.
      FCM 패키지명, FCM 프로젝트 ID, FCM 비공개키파일 항목을 모두 입력 하시고
      [확인] 을 클릭해주시면 설정은 마무리 됩니다.




      [FCM 패키지명]
      1-3 에서 설정했던 com.webview.앱영문명 을 입력하시면 됩니다.

      [FCM 프로젝트 ID]
      1-4 에서 이동했던 [프로젝트 설정] 페이지로 이동하시면 내 프로젝트 섹션에서 확인하실 수 있습니다. (스샷참조)

      [FCM 비공개키파일]
      위에서 임의파일명으로 변경했던 파일명 key.json 을 입력하시면 됩니다.




      고생하셨습니다. 모든 설정이 완료 되었습니다.
      1-3 에서 다운로드 했던 google-services.json 파일은
      신청서에 첨부해주셔야 합니다.


      창을 닫아주시고, 신청을 계속해주세요!