그누보드 그누보드 추천 취소 기능 만들기!!
페이지 정보
본문
안녕하세요 이번에 알려드릴것은 추천 취소 기능입니다
밑에 보시면서 대충 찾으셔서 바꾸시면될듯합니다? 하하
일단 첫번째로
/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를 호출해서 보여주게끔하는거죠
위 함수를 각 사용중인 스킨에 다 바꿔주시면됩니다
그럼이제 추천을 누르고 한번더 눌렀을때 취소를 할 수 있습니다.
댓글목록
예게님의 댓글
예게 이름으로 검색 아이피 (112.172) 작성일
좋을 글 감사합니다.
따라서 제 그누보드 홈피를 수정하는 중입니다.
추천버튼을 누르면 취소만 되고, 추천은 되지않는 현상이 생겼네요^^;
뭐가 잘 못 되었을까요?
ssong님의 댓글의 댓글
ssong 쪽지보내기 마이페이지 아이디로 검색 아이피 (121.140) 작성일
말씀해주신 내용만으로는.. 제가 어떻게 파악할 방법이 없네요
추천이 정상적으로 되지않는다면 살펴보아야할것이 취소 되었을때 board_good_table테이블의 값이 정상적으로 삭제되었는지 체크 해보셔야 할것같습니다
어디서 오류가 나는지 파악도 필요해보이구요
감사합니다님의 댓글
감사합니다 이름으로 검색 아이피 (222.117) 작성일
insert 가 없습니다. 다들 알아서 수정해서 사용하시는지 모르겠지만 초보들한텐 정말 어렵네요.
저정도로 세세하게 알려주신건 감사하지만
알려주신데로 따라서 바꾸는게 더 힘들고 에러시 뭐가 잘못됬는지 파악하는것도 너무 힘드네요
저정도면 .php 파일을 올려주시는게 낫다 싶습니다.
https://sir.kr/qa/465277
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되는 부분(추천부분)은 그대로 두셔야합니다
감사합니다만님의 댓글의 댓글
감사합니다만 이름으로 검색 아이피 (222.117) 작성일
오늘 다시한번 맘잡고 차근차근 해봤는데요.. 아무래도 좀 뭔가 기본 지식이 있어야 가능한거 아닌가 싶습니다. (물론 제 기준으로요..)
최송하지만 바꾼 전체 소스를 올려주시면 안될까요. 질문과 부탁 안하려고 많은 시간을 고민하고 이리저리 해봤습니다.
ssong님의 댓글의 댓글
ssong 쪽지보내기 마이페이지 아이디로 검색 아이피 (210.121) 작성일
이미 저기 올라와 있는게 전부입니다
당연히 코드를 보고 수정함에 있어 기본 지식이 필요합니다
정 급하고 적용이 필수로 필요한 작업이라면 따로 제작의뢰를 요청해주세요
- 1(current)