그누보드 추천 취소 기능 만들기!! > 그누보드5 팁자료실

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누보드5 팁자료실

그누보드 추천 취소 기능 만들기!! 정보

그누보드 추천 취소 기능 만들기!!

본문

안녕하세요 이번에 알려드릴것은 추천 취소 기능입니다

 

밑에 보시면서 대충 찾으셔서 바꾸시면될듯합니다? 하하

 

일단 첫번째로

 

/bbs/good.php 로 갑시다!

 

여기서보면 



// 자바스크립트 사용가능할 때
if(isset($_POST['js']) && $_POST['js'] === "on") {

이렇게 나뉘는게 보일텐데 두개다 작업을 해줘야합니다

 

일단 먼저 자바스크립트 사용가능할때 먼저 하겠습니다



function print_result($error, $count, $msg='')
{
echo '{ "error": "' . $error . '", "count": "' . $count . '", "msg": "'.$msg.'" }';
    if($error)
exit;
}

print_result 함수는 $msg를 추가해줍시다

이유는 취소를했을때 카운트 증가/감소값이 바로보여야하는데 기존꺼에는 error얼럿아니면 추천증가관련 메세지만 출력하기 때문이지요

게다가 메세지도 취소되었습니다로 보여야 직관적이고 좋을테니 이렇게 하는겁니다

 

그리고 밑으로 내려가다보면~~ select문이 보일껍니다



$sql = " select bg_id,bg_flag,bg_datetime from {$g5['board_good_table']}
            where bo_table = '{$bo_table}'
            and wr_id = '{$wr_id}'
            and mb_id = '{$member['mb_id']}'
            and bg_flag in ('good', 'nogood') ";
$row = sql_fetch($sql);
if ($row['bg_id'])

이렇게 바꿔줍시다 달라진건 bg_id와 bg_datetime을 들고오는 정도입니다

bg_id는 취소에 꼭필요한 값이니 반드시들고오고

bg_datetime은 뒤에 필요한 기능을 위해 들고오는것데 보시고 필요없으시면 빼셔도됩니다

 

!주의!!! if ($row['bg_flag']) > if ($row['bg_id'])  변경됩니다 !! 이부분 주의해서 봐주세요 
 

그럼이제 기존 추천이 이미되어있을경우를 수정합시다

if($row['bg_id']) 안에 내용을

(기존 if ($row['bg_flag']) 조건 입니다 확인잘해주세요!)



if($good != $row['bg_flag']){
 if ($row['bg_flag'] == 'good')
  $status = '추천';
 else
  $status = '비추천';

 $error = "이미 $status 하신 글 입니다.";
 print_result($error, $count);
}else{
 $timestamp = strtotime($row['bg_datetime']." +5 minutes");
 if($timestamp < strtotime(G5_TIME_YMDHIS)){
  $msg = "취소는 5분이내에만 가능합니다.";
  print_result($error, $count, $msg);
 }else{
  // 추천(찬성), 비추천(반대) 카운트 감소
  sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} - 1 where wr_id = '{$wr_id}' ");
  // 내역 삭제
  sql_query(" delete from {$g5['board_good_table']} where bg_id = '".$row['bg_id']."' ");

  $sql = " select wr_good,wr_nogood from {$g5['write_prefix']}{$bo_table} where wr_id = '$wr_id' ";
  $row = sql_fetch($sql);

  $count = $row['wr_'.$good];

  run_event('bbs_increase_good_json', $bo_table, $wr_id, $good);

  if ($good == 'good')
   $status = '추천';
  else
   $status = '비추천';

  $msg = $status."이 취소되었습니다.";
  print_result($error, $count, $msg);
 }
}

요렇게 싹 바꿔주세요

 

뭐 내용은 보시면 아실겁니다 ㅎㅎ..

 

$timestamp 부분은 추천한지 5분이 지나면 취소가 불가능하도록 막아둔것입니다 여기서 bg_datetime이 쓰입니다 현재 시간과 비교를해야되기때문이지요

이 기능이 필요없다 하시는분들은 if문을 지우시고 else안의 내용만 쓰시면됩니다~

 

그다음에 else문에 추천이 성공했을때 증가 보시면 print_result함수가 있을껀데요



if ($good == 'good')
$status = '추천';
else
    $status = '비추천';

$msg = "이 글을 $status 하셨습니다.";
print_result($error, $count, $msg);

이렇게 $msg를 추가해줍시다

 

이렇게하면 자바스크립트 사용일때 부분은 끝났구요

 

자바스크립트를 사용하지않을때 부분이 남았는데 저기부분도 보시면 똑같이 되어있습니다

다만 print_result가 아니라 alert으로 되어있을꺼에요 그부분만 신경써서 바꿔주시면됩니다



$sql = " select bg_id,bg_flag,bg_datetime from {$g5['board_good_table']}
            where bo_table = '{$bo_table}'
            and wr_id = '{$wr_id}'
            and mb_id = '{$member['mb_id']}'
            and bg_flag in ('good', 'nogood') ";
$row = sql_fetch($sql);
if ($row['bg_id'])
{
    if($good != $row['bg_flag']){
        if ($row['bg_flag'] == 'good')
            $status = '추천';
        else
            $status = '비추천';

        $msg = "이미 $status 하신 글 입니다.";
        alert($msg, '', false);
    }else {
        $timestamp = strtotime($row['bg_datetime'] . " +5 minutes");
        if ($timestamp < strtotime(G5_TIME_YMDHIS)) {
            $msg = "취소는 5분이내에만 가능합니다.";
            alert($msg, '', false);
        } else {
            // 추천(찬성), 비추천(반대) 카운트 감소
            sql_query(" update {$g5['write_prefix']}{$bo_table} set wr_{$good} = wr_{$good} - 1 where wr_id = '{$wr_id}' ");
            // 내역 삭제
            sql_query(" delete from {$g5['board_good_table']} where bg_id = '" . $row['bg_id'] . "' ");

            $sql = " select wr_good,wr_nogood from {$g5['write_prefix']}{$bo_table} where wr_id = '$wr_id' ";
            $row = sql_fetch($sql);

            $count = $row['wr_' . $good];

            if ($good == 'good')
                $status = '추천';
            else
                $status = '비추천';

            $href = get_pretty_url($bo_table, $wr_id);

            run_event('bbs_increase_good_html', $bo_table, $wr_id, $good, $href);

            $msg = $status . "이 취소되었습니다.";
            alert($msg, '', false);
        }
    }
}

!주의!!! if ($row['bg_flag']) > if ($row['bg_id'])  변경됩니다 !! 이부분 주의해서 봐주세요

위와 마찬가지로 기존 if문에 있던 else문은 그대로 두셔야합니다

 

이렇게만 하시면됩니다

 

그럼 이제 다오셨어요!

 

각이제 skin/board/사용중인스킨/view.skin.php로 갑시다

view.skin.php 보시면 맨하단에 excute_good함수가 있을겁니다



function excute_good(href, $el, $tx)
{
    $.post(
href,
        { js: "on" },
        function(data) {
if(data.error) {
alert(data.error);
                return false;
            }




if(data.count) {
    $el.find("strong").text(number_format(String(data.count)));
}

if(data.msg){
    $tx.stop().hide();
    $tx.text(data.msg);
    $tx.fadeIn(200).delay(2500).fadeOut(200);
}


        }, "json"
    );
}

내용을 이렇게 바꿔줍시다

error 메세지가있을경우엔 기존과 그대로 alert창을 호출하고

추천 증가/취소가 있을경우에는 카운트값을 바꾸고 msg를 호출해서 보여주게끔하는거죠

 

위 함수를 각 사용중인 스킨에 다 바꿔주시면됩니다

 

그럼이제 추천을 누르고 한번더 눌렀을때 취소를 할 수 있습니다.

 

https://ye-ah.net/coding/5

제 커뮤니티에서 다적고 보니 그냥 good.php를 만들어서 배포할껄그랬나봐요...

뭐 기왕적은거 올립니다 ㅠㅠㅋ

추천
16

댓글 26개

오류가 있어 수정합니다 추천을 눌렀으면 비추천은 되지말아야하는데 조건이없어서 넘어가네요

if($good != $row['bg_flag']){
 if ($row['bg_flag'] == 'good')
  $status = '추천';
 else
  $status = '비추천';

 $error = "이미 $status 하신 글 입니다.";
 print_result($error, $count);
}
이걸추가해주시면됩니다
내용은 수정해두었으니 다시한번 보시길 권장드립니다...
와 보고 따라하는데도 엄청 어렵네요 ㅋㅋㅋㅋ 너무하고싶은데 뭐가 이리 헷갈리는지 눈알빠지겠네요.. 소중한 정보 감사합니다.. 하다보면 되겠죠 ㅠㅠ
전체 2,431 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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