그누보드 추천 취소 기능 만들기!! > 전체/코딩

본문 바로가기
사이트 내 전체검색

전체

그누보드 [코딩] 그누보드 추천 취소 기능 만들기!!

페이지 정보

profile_image
작성자 ssong 쪽지보내기 마이페이지 아이디로 검색  (222.107)
댓글 7건 조회 2,703회 작성일 20-05-07 14:56

본문

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


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


일단 첫번째로


/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를 호출해서 보여주게끔하는거죠


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


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

추천2 비추천0
URL 복사
댓글 7 /

댓글목록

profile_image

예게님의 댓글

예게 이름으로 검색 아이피 (112.172) 작성일

좋을 글 감사합니다.
따라서 제 그누보드 홈피를 수정하는 중입니다.
추천버튼을 누르면 취소만 되고, 추천은 되지않는 현상이 생겼네요^^;
뭐가 잘 못 되었을까요?

추천0 비추천0
profile_image

ssong님의 댓글의 댓글

ssong 쪽지보내기 마이페이지 아이디로 검색 아이피 (121.140) 작성일
@예게

말씀해주신 내용만으로는.. 제가 어떻게 파악할 방법이 없네요

추천이 정상적으로 되지않는다면 살펴보아야할것이 취소 되었을때 board_good_table테이블의 값이 정상적으로 삭제되었는지 체크 해보셔야 할것같습니다

어디서 오류가 나는지 파악도 필요해보이구요

추천0 비추천0
profile_image

감사합니다님의 댓글

감사합니다 이름으로 검색 아이피 (222.117) 작성일

insert 가 없습니다. 다들 알아서 수정해서 사용하시는지 모르겠지만 초보들한텐 정말 어렵네요.
저정도로 세세하게 알려주신건 감사하지만
알려주신데로 따라서 바꾸는게 더 힘들고 에러시 뭐가 잘못됬는지 파악하는것도 너무 힘드네요
저정도면 .php 파일을 올려주시는게 낫다 싶습니다.
https://sir.kr/qa/465277

추천0 비추천0
profile_image

ssong님의 댓글의 댓글

ssong 쪽지보내기 마이페이지 아이디로 검색 아이피 (210.121) 작성일
@감사합니다

안녕하세요 질문주신글 확인해보았는데
if문 모두 변경부분에서 제가 설명이 조금 부족했나보네요
아래 else문은 그대로 두어야합니다

bg_id와 bg_datetime을 들고오는 시점에서 아래부분에 if ($row['bg_flag']) > if ($row['bg_id']) 이런식으로 if문 조건이 변경된게 보이실겁니다
제가 말한 if문 내용 모두 변경은 기존 if ($row['bg_flag']) 이 조건안에 들어있던 내용모두 변경이지 여기 조건에서 else되는 부분(추천부분)은 그대로 두셔야합니다

추천0 비추천0
profile_image

감사합니다만님의 댓글의 댓글

감사합니다만 이름으로 검색 아이피 (222.117) 작성일
@ssong

오늘 다시한번 맘잡고 차근차근 해봤는데요..  아무래도 좀 뭔가 기본 지식이 있어야 가능한거 아닌가 싶습니다. (물론 제 기준으로요..)
최송하지만 바꾼 전체 소스를 올려주시면 안될까요.  질문과 부탁 안하려고 많은 시간을 고민하고 이리저리 해봤습니다.

추천0 비추천0
profile_image

ssong님의 댓글의 댓글

ssong 쪽지보내기 마이페이지 아이디로 검색 아이피 (210.121) 작성일
@감사합니다만

이미 저기 올라와 있는게 전부입니다
당연히 코드를 보고 수정함에 있어 기본 지식이 필요합니다
정 급하고 적용이 필수로 필요한 작업이라면 따로 제작의뢰를 요청해주세요

추천0 비추천0
Total 17,827건 892 페이지
  • RSS

검색


회원로그인

회원가입

사이트 정보

회사명 : YEAH 커뮤니티 / 대표 : 이성재 / 개인정보관리책임자 : 이성재

Copyright © YE-AH.NET All rights reserved.