Tip & Tech

활용팁

홈 > 회원포럼 > 활용팁
활용팁

게시글 작성시 자동 랜덤댓글 / 랜덤 포인트 이벤트

9 이니스프리 7 282 3 0

안녕하세요?


아미나에서 게시글을 작성하면 자동으로 댓글을 남기는 스크립트를 


랜덤댓글(글 작성 및 수정시)과 랜덤 포인트 제공이라는 두 가지 방법으로 응용해 보았습니다 ^^


한별아빠 님과 다른 고수 회원님들께 항상 받기만 하여 너무나도 감사한 마음에 


매우 부족한 스크립트이지만 약소하게나마 보답의 뜻으로 올려드립니다.



저는 개발자도 아니고 IT 직역에 근무하는 사람이 아니며 문과 출신이어서 실력이 매우 허접하니 


제 스크립트에 문제점이 있다면 이를 지적해주시면 감사하겠습니다 :)


그리고 제가 모든 PHP 버전과 아미나 버전에서 테스트해본 것은 아니기 때문에 


에러 발생에 대해 대응하실 수 있는 경우에만 실제로 적용하시면 감사하겠습니다.




1. 게시글 작성시 자동으로 랜덤 댓글 남기기 + 게시글 수정시 자동으로 랜덤 댓글 남기기


자동 랜덤 댓글과 관련된 소스가 이미 그누보드나 아미나의 여러 게시물에 올라와 있고


사실 제가 작성한 스크립트도 이와 큰 차이가 없습니다.


다만 다음과 같은 부분을 좀 더 보완하도록 노력하였습니다.


1) 관리자로 로그인하거나 회사 IP로 접속한 경우에는 자동댓글이 등록되지 않도록 하였으며,


2) $write_table에 데이터를 삽입하는 부분을 비롯하여 스크립트를 가능한 한 컴팩트하게 작성했고,


3) 선택된 특정 게시판에만 자동 댓글이 등록되도록 하였습니다.

(게시판별로 다른 스킨을 적용하는 방법도 있지만 이 방법이 상대적으로 간편할 것 같습니다)



기존의 자동댓글 스크립트에서 $wr_write_password와 관련된 부분을 모두 삭제하여 null로 입력하여도


제가 테스트한 바로는 아미나에서 아직까지 아무런 문제점을 발견하지 못하여 최대한 줄였습니다.


그리고 아미나 basic-board의 write_update.tail.skin.php 파일에 원래 들어있는


@include_once($write_skin_path.'/write_update.tail.skin.php'); 


이 부분을 삭제했는데 아직까지는 테스트에서 아무런 문제가 발생하지 않았습니다.


문제가 된다면 아미나의 고수님들께서 지적 부탁드립니다 ^^



아미나를 기준으로 basic-board의 write_update.tail.skin.php 파일을 아래와 같은 내용으로 대체하시면 됩니다.


파일을 대체하시기 전에 백업 파일을 만들어두시는 것을 강력히 추천드립니다.


(제가 Code highlighter 사용에 익숙치 못해서 부득이 그냥 올려드립니다 ㅠㅠ 죄송합니다)



<?php

if (!defined('_GNUBOARD_')) exit; 


// 글 작성시 랜덤댓글 자동등록

if ($w == '' && $_SERVER['REMOTE_ADDR'] !== '회사IP' && !($is_admin) && $bo_table === '게시판ID') {

    // 회사IP로 접속하거나 admin 계정으로 접속한 경우를 제외하고, 선택된 게시판에만 글 작성시 자동 댓글이 등록됩니다.

    $reply = array(

    "안녕하세요? 문의글을 작성해주셔서 감사합니다.\n최대한 빠른 시간 내에 확인한 후 답변 드리겠습니다.",

    "안녕하세요? 저희 사이트에 문의해주셔서 감사합니다.\n최대한 빨리 답변 드리도록 하겠습니다.",

    "안녕하십니까? 게시판에 문의를 남겨주셔서 감사드립니다.\n최대한 신속히 답변을 드리겠습니다.",

    "안녕하십니까? 올려주신 질문이 잘 접수되었습니다.\n확인 후 바로 답변 올리겠습니다. 감사합니다.",

    "안녕하십니까? 저희 사이트에 문의를 해주셔서 감사합니다.\n저희가 신속히 확인하여 답변 드리겠습니다."

    ); // 랜덤으로 출력할 댓글을 배열로 입력합니다.

    $randint = mt_rand(0, count($reply)-1);

    $wr_write = get_write($write_table, $wr_id);

    $wr_write_content = $reply[$randint]; 

    $wr_write_cname = "게시판담당자"; // 댓글 작성자의 이름

    $wr_write_mbid = "boardmaster"; // 댓글 작성자의 아이디

    $sql = " insert into $write_table

                set ca_name = '$wr_write[ca_name]',

                    wr_num = '$wr_write[wr_num]',

                    wr_parent = '$wr_id',

                    wr_is_comment = '1',

                    wr_comment = '1',

                    wr_content = '$wr_write_content',

                    mb_id = '$wr_write_mbid',

                    wr_password = '',

                    wr_name = '$wr_write_cname',

                    wr_datetime = '".G5_TIME_YMDHIS."',

                    wr_ip = '' ";

    sql_query($sql);

    sql_query(" update $write_table set wr_comment = wr_comment + 1 where wr_id = '$wr_id' ");

    sql_query(" update $g5[board_table] set bo_count_comment = bo_count_comment + 1 where bo_table = '$bo_table' ");

}


// 글 수정시 랜덤댓글 자동등록 

if ($w == 'u' && $_SERVER['REMOTE_ADDR'] !== '회사IP' && !($is_admin) && $bo_table === '게시판ID') { 

    // 회사IP로 접속하거나 admin 계정으로 접속한 경우를 제외하고, 선택된 게시판에만 수정시 자동 댓글이 등록됩니다. 

    $reply = array( 

    "수정된 내용이 질의에 반영되었습니다.\n저희가 최대한 신속히 답변 드리겠습니다.",

    "변경해주신 내용대로 검토하겠습니다.\n최대한 빠른 시간 내에 확인하여 답변을 드리겠습니다."

    );

    $randint = mt_rand(0, count($reply)-1);

    $wr_write = get_write($write_table, $wr_id);

    $wr_write_content = $reply[$randint];

    $wr_write_cname = "게시판담당자"; // 댓글 작성자의 이름

    $wr_write_mbid = "boardmaster"; // 댓글 작성자의 아이디

    $sql = " insert into $write_table

                set ca_name = '$wr_write[ca_name]',

                    wr_num = '$wr_write[wr_num]',

                    wr_parent = '$wr_id',

                    wr_is_comment = '1',

                    wr_comment = '1',

                    wr_content = '$wr_write_content',

                    mb_id = '$wr_write_mbid',

                    wr_password = '',

                    wr_name = '$wr_write_cname',

                    wr_datetime = '".G5_TIME_YMDHIS."',

                    wr_ip = '' ";

    sql_query($sql);

    sql_query(" update $write_table set wr_comment = wr_comment + 1 where wr_id = '$wr_id' ");

    sql_query(" update $g5[board_table] set bo_count_comment = bo_count_comment + 1 where bo_table = '$bo_table' ");

}


if($w == '' && isset($is_direct) && $is_direct) {

if ($file_upload_msg)

alert($file_upload_msg, G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table);

else

goto_url(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table);

}

?>



부연설명을 드리면 $wr_write_cname과 $wr_write_mbid에 실제 닉네임과 아이디를 입력하지 않아도 무방합니다.


다만 실제 아이디를 입력하면 관리자와 해당 아이디로 접속하여 수정할 수 있고,


존재하지 않는 아이디를 입력하면 해당 게시판에 권한이 있는 관리자만 수정 가능합니다.



비록 제가 PHP에 대해 잘 알지는 못하지만 rand() vs mt_rand() vs random_int()에 대해 설명을 조금 드리면,


PHP 5.X 이하에서는 mt_rand()가 rand()보다 더 향상된 난수 알고리즘(Mersenne Twist)를 사용합니다.


그리고 random_int()는 PHP 7.X에서만 사용가능한 함수입니다.


따라서 이 스크립트에서는 mt_rand()를 선택하였습니다.



이 스크립트를 write_update.tail.skin.php 파일에 덮어쓴 다음에 새 글을 작성하시면


다음과 같이 글 작성과 동시에 댓글이 자동으로 등록되는 것을 확인할 수 있습니다.




다만 이 스크립트를 사용하면 게시글이 작성되자마자 동시에 댓글이 등록되기 때문에 


실질적으로 이 스크립트를 활용할 수 있는 방법이 다소 제한되는 것 같습니다.


따라서 제가 작성한 것처럼 컴퍼니나 샵 테마를 사용할 때 질문게시판에 등록 확인 댓글을 남기거나,


커뮤니티 사이트 초기에 무플을 방지하기 위한 차원에서 사용할 수 있을 것 같습니다 ^^



그리고 조금 더 댓글을 랜덤하고 다양하게 하고 싶으시다면 


두 문장을 두 개의 배열에 나눠서 담아서 각각 랜덤하게 추출하여 조합하는 방식을 추천드립니다 ^^




2. 게시글 작성시 랜덤 포인트 이벤트


앞서 말씀드린 것처럼 자동 랜덤 댓글은 활용의 폭이 그다지 넓지 않습니다.


그러나 코드 몇 줄만 추가하면 랜덤 포인트 이벤트로 활용이 가능합니다.


제 개인적인 생각으로는 오히려 이 방식이 더 쓸모있는 것 같네요.


여담이지만 제 기억이 맞다면 XE(라이믹스)에서도 자동 랜덤 댓글과 랜덤 포인트 이벤트 모듈이 각각 있는데 


두 개를 동시에 설치하면 충돌이 발생하는 경우가 있었던 것 같군요 ^^;



사용방법은 자동 랜덤 댓글과 동일합니다.


아미나를 기준으로 basic-board의 write_update.tail.skin.php 파일을 아래와 같은 내용으로 대체하시면 됩니다.


파일을 대체하시기 전에 백업 파일을 만들어두시는 것을 강력히 추천드립니다.



<?php

if (!defined('_GNUBOARD_')) exit; 


$percentage = 50; // 이벤트에 당첨될 확률

$dice = mt_rand(1, 100);

if ($w == '' && $dice < $percentage && $_SERVER['REMOTE_ADDR'] !== '회사IP' && !($is_admin)) {

    // 회사IP로 접속하거나 admin 계정으로 접속한 경우를 제외합니다. 

    $randpoint = mt_rand(15, 30); // 제공할 포인트의 범위

    $reply = array(

    "랜덤 포인트 이벤트 당첨을 진심으로 축하드립니다~!\n".$randpoint."p를 추가로 획득하셨습니다.",

    "축하드립니다! 랜덤 포인트 이벤트에 당첨되셨습니다 ^^\n".$randpoint."p를 추가 획득하셨습니다."

    );

    $randint = mt_rand(0, count($reply)-1);

    $wr_write = get_write($write_table, $wr_id);

    $wr_write_content = $reply[$randint];

    $wr_write_cname = "이벤트담당자"; // 댓글 작성자의 이름

    $wr_write_mbid = "eventmaster"; // 댓글 작성자의 아이디

    $sql = " insert into $write_table

                set ca_name = '$wr_write[ca_name]',

                    wr_num = '$wr_write[wr_num]',

                    wr_parent = '$wr_id',

                    wr_is_comment = '1',

                    wr_comment = '1',

                    wr_content = '$wr_write_content',

                    mb_id = '$wr_write_mbid',

                    wr_password = '',

                    wr_name = '$wr_write_cname',

                    wr_datetime = '".G5_TIME_YMDHIS."',

                    wr_ip = '' ";

    sql_query($sql);

    sql_query(" update $write_table set wr_comment = wr_comment + 1 where wr_id = '$wr_id' ");

    sql_query(" update $g5[board_table] set bo_count_comment = bo_count_comment + 1 where bo_table = '$bo_table' ");

    insert_point($member['mb_id'], $randpoint, '랜덤포인트', $bo_table, $wr_id, $rw_id);

}


if($w == '' && isset($is_direct) && $is_direct) {

if ($file_upload_msg)

alert($file_upload_msg, G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table);

else

goto_url(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table);

}

?>



여러 번 테스트 해봤는데 일단 작동은 잘 되네요 ^^


이벤트에 당첨되면 다음과 같이 댓글이 자동으로 등록됩니다.

(너무 당연한 말씀이지만 당첨되지 않으면 아무런 댓글이 달리지 않습니다 ㅠㅠ)


0ea90d70442207ebaf7c685ed83fdfa0_1542707335_7217.png



포인트 내역을 확인해보면 다음과 같이 포인트가 지급된 것을 확인할 수 있습니다.


0ea90d70442207ebaf7c685ed83fdfa0_1542707335_7468.png
 


최근 그누보드 사이트의 포인트 정책이 바뀐 것에 대해 의견이 분분하던데


과연 이런 방식의 랜덤 포인트 이벤트가 커뮤니티의 활성화에 기여할지는 저도 잘 모르겠네요 ㅠㅠ


적절히 잘 사용하셔서 부디 글 리젠율이 향상 되시면 좋겠습니다.



그럼 편안한 저녁 되시고 오늘 밤에 비가 내리고 쌀쌀해진다는데 감기 조심하세요.


허접한 스크립트에 장황한 설명글을 읽어주셔서 다시 한 번 감사드립니다 :)


7 Comments
18 사노라면 11.21 08:29  
수고하셧읍니다
부족한 글인데 항상 격려해주셔서 정말 감사합니다~ ^^
그럼 사노라면 님께서도 감기 조심하시고 항상 건강하세요 :)
2 대박이 11.26 14:55  
흠~~!! 좋은 정보 감사합니다.
부족한 스크립트인데 조금이나마 도움이 되셨으면 좋겠네요.
저야말로 감사드립니다 ^-^
1 Roum 12.04 11:42  
좋은 정보입니다. 감사합니다.
여러모로 부족한 스크립트이지만 부디 도움이 되셨으면 좋겠네요~!
그럼 저녁식사 맛있게 드세요 ^-^
2 쿠몽 12.11 10:52  
좋은 정보 감사합니다.
제목
최근 글
최근 댓글
Facebook Twitter GooglePlus KakaoStory KakaoTalk NaverBand