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

그누보드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,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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