
팁과노하우
[수정] 게시판 내 일정 확률로 보너스 포인트 지급 하기
안녕하세요...
미니님a 회원입니다.
먼저 해당 팁은 그누보드 배포사이트인 SIR에도 작성하지 않고 오직 리빌더에만 작성하는 팁이며,
기존에 SIR에 업로드 된 스킨 버그 수정된 버전입니다.
※ 본 팁은 손수 작성한 팁이며, 창작으로 제작된 기능이므로, 다른 곳에 퍼가실 땐 반드시 제 닉네임을 작성해주시길 바랍니다.
이는 최소한의 매너입니다.
그럴 일은 없겠지만, 진짜 진짜 만약에 발견되면, 팁 공유에 대한 고민이 ...생기............
자!!! RB 기본 스킨을 이용하면서,
아 사용자에게 보너스 포인트 지급을 하고 싶은데 방법이 없을까? 하셨을 운영자님은 안계신가요 ?^^;
해당 내용은 스킨과 연계됩니다.
잘 몰라서 스킨을 변경하실꺼면 아래 링크에서 스킨을 그대로 적용하시면 되며,
이미 스킨이 상당히 커스터마이징이 많이 된 상태인 경우 해당 팁만 적용이 가능합니다.
https://rebuilder.co.kr/userdata/280
이런 느낌으로 동작합니다.
글 그리고 댓글 모두 적용할 수 있습니다.
1. 사용하시는 게시판 설정으로 들어가주세요
그리고 맨 하단에 다음과 같이 추가 해주세요
참고로 여분 필드 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, '글쓰기보너스');
}
잘 모르겠다 하시면 아래 스샷 참조 하시길 바랍니다.
자 그다음 댓글 보너스 포인트 지급을 위해 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, '코멘트보너스');
}
자! 이제 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 } ?>
마찬가지로 난 잘 모르겠는데? 하시면 아래 스샷 참조 하시면 됩니다.
이제 댓글에도 남겨야죠 ??
댓글은 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 } ?>
이것도 아래 스샷 참고 하시면 위치는 확인 되실 것입니다.
여기까지 오셨다면 아래 기능은 추가가 완료 되었지만, 문제점이 하나 발생합니다.
바로 글이나 댓글 삭제 시 보너스 포인트가 회수가 안된다는 버그인데요
이제 그 부분도 해결해보겠습니다.
리빌더 기본 스킨에는 해당 파일이 기본적으로 없습니다.
따라서 파일명 잘 보시고 직접 생성하셔야 합니다.
만약 해당 파일이 있다면 코드만 넣어주세요
먼저 글삭제 파일 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, '댓글삭제');
}
그러면 아래 처럼가 잘 처리 될 것입니다.
아래는 전체적으로 구동되는 움짤 영상입니다. 클릭 하시면 큰 화면에서 확인이 가능합니다.
고맙습니다.
[수정]
25. 02. 23
- 통합 게시판용 소스에 대한 설명 추가
- 이전글SQL Injection, XSS 보안 강화하기2025.01.17
- 다음글베이직2 게시판 리스트에 인기글, 공지사항 넣기2025.01.05
댓글목록

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