팁과노하우

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 파일을 열어 아래 코드를 넣어주세요


[추가] 

통합 게시판의 경우 update/basic/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 파일을 열어 아래 코드를 추가 해주세요

[추가]

통합 게시판의 경우 update/basic/cmt_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 파일을 열어서 다음 코드를 찾아주세요


[추가]

통합 게시판의 경우 view/basic/skin.php 파일을 열어   <div id="bo_v_share"> (241번 라인) 을 찾아주세요

해당 라인 바로 위에 아래 코드를 넣어주시면 됩니다.



<?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 파일을 열어서 다음 코드를 찾아주세요


[추가]

cmt/basic/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
 







[수정]


25. 02. 23

- 통합 게시판용 소스에 대한 설명 추가



  • 공유링크 복사
    미니홈 쪽지 구독하기
    구독하고 알림받기

    댓글목록

    profile_image
    no_profile 우루사100mg미니홈 1:1 대화하기  오래 전

    설명이 너무 자세해서 무릎을 탁! 치고 갑니다. 테스트 해보니 잘되네요. 설명이 잘되있어 코드 복붙 하는 수준도 따라 할 수 있을거 같아 추천드립니다.

    2025-01-15 17:03

구매 신청
  • 구매문의 : cs@rebuilder.co.kr / 010-6466-3355
    신청 이후 담당자가 개별연락 드리고 있습니다.
    입금자명과 실제 입금자가 동일한 경우 자동처리 됩니다.
  • 결제예정 금액 : 0 (VAT별도)
    하나은행(KOEXKRSE) : 258-910104-00407 / 김은정(인덱스)

  •