크롬80버전 결제 이슈, 영카트5 주요패치 확인!

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

그누보드5
영카트5
매뉴얼
Q & A
제작의뢰
컨텐츠몰
부가서비스
소모임
커뮤니티

그누보드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문 안에 내용을


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);
        }
    }
}

이렇게만 하시면됩니다

 

그럼 이제 다오셨어요!

 

각이제 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를 만들어서 배포할껄그랬나봐요...

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

추천11

댓글 전체

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

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

 $error = "이미 $status 하신 글 입니다.";
 print_result($error, $count);
}
이걸추가해주시면됩니다
내용은 수정해두었으니 다시한번 보시길 권장드립니다...
전체 1,663 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 (06253) 서울특별시 강남구 도곡로1길 14, 6층 624호 (역삼동, 삼일프라자) 대표메일:admin@sir.kr
사업자등록번호:217-81-36347 대표:홍석명 통신판매업신고번호:2014-서울강남-02098호 개인정보보호책임자:이총

© SIRSOFT