그누보드 추천 취소 기능 만들기!! 정보
그누보드 추천 취소 기능 만들기!!관련링크
본문
안녕하세요 이번에 알려드릴것은 추천 취소 기능입니다
밑에 보시면서 대충 찾으셔서 바꾸시면될듯합니다? 하하
일단 첫번째로
/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를 호출해서 보여주게끔하는거죠
위 함수를 각 사용중인 스킨에 다 바꿔주시면됩니다
그럼이제 추천을 누르고 한번더 눌렀을때 취소를 할 수 있습니다.
제 커뮤니티에서 다적고 보니 그냥 good.php를 만들어서 배포할껄그랬나봐요...
뭐 기왕적은거 올립니다 ㅠㅠㅋ
!-->!-->!-->!-->!-->!-->!-->16
댓글 26개
if($good != $row['bg_flag']){
if ($row['bg_flag'] == 'good')
$status = '추천';
else
$status = '비추천';
$error = "이미 $status 하신 글 입니다.";
print_result($error, $count);
}
이걸추가해주시면됩니다
내용은 수정해두었으니 다시한번 보시길 권장드립니다...
소스 코드를 살펴보니 다르네요.
이건 순정용이라 ㅎㅎ
초짜이다보니 따라해보다가 잘안되서.. ㅠ.ㅠ
5.5.8.2.5 도 정상 동작