내글에 코멘트 작성, 내코멘트에 코멘트 작성시 알려주기. > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

내글에 코멘트 작성, 내코멘트코멘트 작성시 알려주기. 정보

내글에 코멘트 작성, 내코멘트코멘트 작성시 알려주기.

본문

요즘 홈피 게시판에 회원이 올려놓은 질문글에, 댓글을 달아주었는데, 추가 코멘트로
또다른 질문한것을 못보고 지나쳐서 항의를 당하는 사태를 맞았습니다...ㅠㅜ

역시..답변 완료 체크를 하게 할까 하다가..
꼭 질문 게시판이 아닌 자유게시판등에서 받는 질문등에서도,
댓글을 지나치기 쉬울거 같아 코멘트 작성시 알림 기능을 만들려고 작업 시작했습니다.

활용팁을 검색하니 불당님의 내글 반응확인이 있는듯 하나...
전 모든 게시판이 아닌 몇몇 특정 게시판에서의 코멘트에 대한 댓글만 알고 싶어서,
게시판의 스킨에서 수정하였습니다. ^^;

우선 테이블 생성후

CREATE TABLE IF NOT EXISTS `g4_board_new_comment` (
  `bnc_num` int(11) NOT NULL auto_increment,
  `write_mb_id` varchar(255) NOT NULL default '',
  `bo_table` varchar(20) NOT NULL default '',
  `wr_id` int(11) NOT NULL default '0',
  `wr_parent` int(11) NOT NULL default '0',
  `wr_comment` int(11) NOT NULL default '0',
  `bnc_mb_id` varchar(255) NOT NULL default '',
  `bnc_check` varchar(3) NOT NULL default '',
  `bnc_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `bnc_tmp1` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`bnc_num`)
);
//bnc_tmp1값은 임시값을 저장하려 추가했었습니다.

write_comment_update.skin.php을
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
if ($w == "c") // 코멘트 입력시
{
  $select_bnc = "select mb_id from $write_table where wr_id = '$wr_id'";
  $result_bnc = sql_fetch($select_bnc);
 
  $sql_bnc = " select wr_id, wr_comment, wr_comment_reply from $write_table
                  where wr_id = '$comment_id' ";
  $reply_array_bnc = sql_fetch($sql_bnc);
 
  $reply_len_bnc = strlen($reply_array_bnc[wr_comment_reply]);
 
  $tmp_comment_reply_bnc = $reply_array_bnc[wr_comment_reply];
 
  $datetime = $g4[time_ymdhis];
 
  for ($j=0; $j<$reply_len_bnc; $j++){
    $reply = substr($tmp_comment_reply_bnc,0,$j);
    $sql_check_id = "select mb_id from $write_table where wr_parent = '$wr_id' and wr_comment = '$reply_array_bnc[wr_comment]' and wr_comment_reply = '$reply'";
    $result_check_id = sql_fetch($sql_check_id);//상위 코멘트 작성자 검색.
   
    $check_double_send = "select count(*) as cnt from g4_board_new_comment where wr_parent = '$wr_id' and wr_comment = '$reply_array_bnc[wr_comment]' and bnc_date = '$datetime' and write_mb_id = '$result_check_id[mb_id]'";
    $result_double_send = sql_fetch($check_double_send);//이미 등록한 아이디인지 체크.
   
    if($result_check_id[mb_id] != $member[mb_id] && $result_double_send[cnt] == 0){//검색해서 본인외의 댓글작성자에게만 전달.
      $sql_bnc_in = "INSERT INTO g4_board_new_comment (bnc_num ,write_mb_id ,bo_table ,wr_id ,wr_parent ,wr_comment ,bnc_mb_id ,bnc_check ,bnc_date ,bnc_tmp1 )
                    VALUES ('' , '$result_check_id[mb_id]', '$bo_table', '$comment_id', '$wr_id','$reply_array_bnc[wr_comment]', '$member[mb_id]', 'no', '$datetime', '');";
      sql_fetch($sql_bnc_in);
    }
  }

  $check_double_send2 = "select count(*) as cnt from g4_board_new_comment where wr_parent = '$wr_id' and wr_comment = '$reply_array_bnc[wr_comment]' and bnc_date = '$datetime' and write_mb_id = '$result_bnc[mb_id]'";
  $result_double_send2 = sql_fetch($check_double_send2);//이미 새글 등록한 아이디인지 체크.

  if($result_bnc[mb_id] != $member[mb_id] && $result_double_send2[cnt] == 0){//글 작성자에게도 알려주기.
    $sql_bnc_in_2 = "INSERT INTO g4_board_new_comment (bnc_num ,write_mb_id ,bo_table ,wr_id ,wr_parent ,wr_comment ,bnc_mb_id ,bnc_check ,bnc_date ,bnc_tmp1 )
                    VALUES ('' , '$result_bnc[mb_id]', '$bo_table', '$comment_id', '$wr_id','$reply_array_bnc[wr_comment]', '$member[mb_id]', 'no', '$datetime', '');";
    sql_fetch($sql_bnc_in_2);
  }
}
?>
로 수정하면, 글 작성시 해당 테이블에 등록됩니다.

이후,

새글 등록 확인 페이지를 만들고,(새 댓글 확인 페이지는 맘에 드는데로 수정하시면 되겠죠,,,전 심플하게..ㅋㅋ)
<?
$colspan=5;
?>
<style>
.col1 { color:#ffffff; }
.bgcol1 { background-color:#b00b00; padding:0px;}
.red { color:#ff0000; }

.bold { font-weight:bold; }
.center { text-align:center; }
.right { text-align:right; }
.left { text-align:left; }

.line1 { background-color:#b00b00; height:2px; }
.line2 { background-color:#cccccc; height:1px; }

.ht { height:25px; }
.ht1 { height:40px; }
.ht2 { height:50px; }
.text{ font-family:Tahoma,굴림; font-size:15pt; }
.text_col { color:#ffffff; }

.list0 { background-color:#d7efff; }
.list1 { background-color:#fcffd7; }

.margin0{ padding-left:10px;}
.margin1{ padding-left:20px; line-height:200%;}
</style>
<table cellspacing=0 cellpadding=0>
<colgroup width=30>
<colgroup width=170>
<colgroup width=100>
<colgroup width=300>
<colgroup width=200>
 <tr>
  <td colspan=<?=$colspan?> height=10></td>
 </tr>
 <tr class='center bold ht bgcol1'>
   <td class='text_col'>순서</td>
  <td class='text_col'>게시판 명</td>
  <td class='text_col'>댓글 작성자</td>
  <td class='text_col'>댓글 내용</td>
  <td class='text_col'>작성 시간</td>
 </tr>
<?
$sql_bnc = "SELECT c. * , b.bo_subject FROM g4_board_new_comment c, g4_board b WHERE b.bo_table = c.bo_table AND c.write_mb_id = '$member[mb_id]' AND c.bnc_check = 'no' order by c.bnc_num desc";
$result = sql_query($sql_bnc);
for($i=1; $row=sql_fetch_array($result); $i++){
  $sql_m_name = "select mb_name from g4_member where mb_id = '$row[bnc_mb_id]'";
  $result_m = sql_fetch($sql_m_name);
 
  $wr_board = "g4_write_".$row[bo_table];
 
  $sql_b_con = "select wr_content from $wr_board where wr_id = '$row[wr_id]'";
  $result_b = sql_fetch($sql_b_con);

  $wr_nick = get_text(cut_str($result_m[mb_nick], 16));

  $wr_subject = get_text(cut_str($result_b[wr_content], 60));
  $sub= "<a href='#' onclick=\"go_bcn('$row[bo_table]','$row[wr_parent]','$row[bnc_num]')\" title='$result_b[wr_content]'><font color='#858585'>".$wr_subject."</font></a>";
if($wr_subject == "")
    $sub = "삭제된 댓글 입니다. <a href='$g4[path]/mypage/go_new_comment.php?del_num=ok&bnc_num=$row[bnc_num]' title='$result_b[wr_content]'><font color='#858585'>확인</font></a>";
  
 echo"<tr class='center ht1'>
   <td>$i</td>
  <td>$row[bo_subject]</td>
  <td>$wr_nick</td>
  <td align='left'>$sub</td>
  <td>$row[bnc_date]</td>
 </tr>";
}
if( $i == 1 ){
 echo" 
 <tr><td colspan=$colspan align=center height=100 class=contentbg>새로운 댓글이 없습니다.</td></tr>";
 
}
?>
 <tr><td colspan=<?=$colspan?> class='line1'></td></tr>
</table>
<script>
function go_bcn(bo_table, wr_parent, bnc_num){
 window.open("../go_new_comment.php?bo_table="+bo_table+"&wr_parent="+wr_parent+"&bnc_num="+bnc_num,"_blank");
}
</script>
에서 새창으로 연결을 해줄때,

중간 페이지 go_new_comment.php를 생성
<?
$go_table = $_GET['bo_table'];
$go_parent = $_GET['wr_parent'];
$bnc_num = $_GET['bnc_num'];
$del_num = $_GET['del_num'];
include_once("./_common.php");

$sql = "UPDATE g4_board_new_comment SET bnc_check = 'yes' WHERE g4_board_new_comment.bnc_num = '$bnc_num' LIMIT 1";
sql_fetch($sql);
if($del_num=="ok"){
?>
<body onload="javascript:del();">
<form name="go_back" method="get">
</form>
</body>
<?}else{?>
<body onload="javascript:start_bbs();">
<form name="go_bbs" method="post">
  <input type="hidden" name="go_table" value="<?=$go_table?>">
  <input type="hidden" name="go_parent" value="<?=$go_parent?>">
</form>
</body>
<?}?>

<script>
function start_bbs() {
  opener.location.reload();
 
  var f = document.go_bbs;
  var go_table = f.go_table.value;
  var go_parent = f.go_parent.value;
  f.action = "../bbs/board.php?bo_table="+go_table+"&wr_id="+go_parent;
 f.submit();
}

function del() {
  var f = document.go_back;
  f.action = "../board_new_comment.php";
 f.submit();
}
</script>


새창으로 게시글로 보내준후, 읽음으로 전환한후 열었던 페이지는 reload하여 읽은 글은 다시 나타내지 않습니다.


이런식으로 단순 작업했는데도,,,,,이틀이나 걸렸네요..ㅠㅜ...역시 머리가 잘 안도는...ㅠㅜ..

만들어 놓고 생각난 문제점은....역시 g4_board_new보다 훨씬 많이 쌓이는 DB..ㅠㅜ...
아...고민이네요..ㄷㄷ..
싸이월드 댓글 알림을 따라하려고 열시미 하였으나,,,결과는...ㅋ...
그래도 출력부분을 메인에 프레임 처리해서 넣어주면,,나름 쓸만할거 같은...ㅋㅋ

추천
4

댓글 15개

ㅋㅋㅋ 필요에 의한 개발인거죠,,ㅋ...
댓글 쌩깠더니..회원님들의 항의가 거세져서요.ㅠㅜ...
출력 부분만 입맛에 맞게 수정해서 사용하시면 될꺼에요,,ㅋ,
싸이처럼 메인에 프레임 처리해서 밖으셔도 될거 같고,
그냥 저처럼 페이지를 따로 구성하셔도 괜찮을거 같고요..ㅋ..
저 소스는 게시판별이라, 각 스킨에 업데이트 해주셔야 합니다.^^;
나름 싸이월드 따라하기...ㅋㅋㅋ(저작권이 걸리진 않겠죠??ㅋ)
네^ㅡ^ 참고해서 사용해볼게요 ㅎㅎ;
기능은 되게 좋아요^ㅡ^

그때 써볼만한데가없어서 기본넣으로 넣어서만 해봤는데 ㅎ;

괜찮던데요^ㅡ^ㅎ
감사히 쓰겠습니다!! 라고 했는데 막상 테스트로 코멘트를 달고 나서... 반응이 없네요 ㅇ<-<.. 흐윽

DB에도 안 쌓여요 ㅠㅠ

write_comment_update.php는 있는데 write_comment_update_skin.php가 따로 없어서,
write_comment_update_skin.php라는 파일을 따로 만들어보기도 하고,
write_commnet_update.php를 대체도 하고, 덧붙여도 봤는데 소용없네요...엉엉

수정: 아, 그러니까 그걸 스킨 있는 경로에다가 새로 만들어서 쑤셔넣는 것이군요...
그래도 안 돌아가는 것은 여전하네요...
아아... 이런 제가 쓸 줄 모르는 탓인데 괜히 푸념 늘어놓아서 죄송합니다 ;;
좋은 것 만들어주셨는데 제가 쓸 줄 몰라서 이렇게 댓글 달아놓네요 ㅠㅠ... ;;;

으엉엉 해결했습니다... 오타였네요... (털썩)... 혼자 징징대다 가서 죄송합니다 ㅠ
정말 유용한 팁 감사합니다 ㅠㅠㅠ 추천 남기고 가요.

아차 해당 게시판으로 이동은 안 되는군요<
감사합니다.
댓글에 댓글... 넘 필요했습니다.
전 스크랩한 게시글에 답글이 달렸을 경우에도 알려줄 수 있도록 좀더 수정을 해봐야겠습니다.
추천 꾸욱 남깁니다.
댓글을 지울경우 아래를 추가하세요.

bbs/delete_comment.php 에 추가

// 내글반응 삭제
sql_query(" delete from g4_board_new_comment where bo_table = '$bo_table' and wr_id = '$comment_id' ");
좋은 팁 감사합니다.^^
작성자 닉넴이 표시가 안 되어서 이 부분을 수정했어요.
$sql_bnc = "SELECT c. * , b.bo_subject , a.mb_nick  FROM g4_board_new_comment c, g4_board b, g4_member a WHERE a.mb_id= '$member[mb_id]' AND b.bo_table = c.bo_table AND c.write_mb_id = '$member[mb_id]' AND c.bnc_check = 'no' order by c.bnc_num desc";
근데 제가 금방 적용해서 모르겠는데
board_new_comment.php파일에서 댓글이 많아지면 목록 페이지 나누기가 되나요?
그리고 댓글 내용을 클릭해야 목록에서 삭제가 되는데
'삭제'버튼을 만들어서 댓글 클릭하는 대신에 삭제버튼 눌러서도 삭제가 되면 좋겠네요.
체크박스 만들어서 여러개 한꺼번에 목록에서 제거할수 있으면 더 좋겠구요.
제 능력 밖이라 원 제작자님께 가능한지 여쭤봅니다~ 글 확인하실지 모르겠지만요.^^;
삭제된 글 외 일반 댓글에도 뒤에
<a href='$g4[path]/mypage/go_new_comment.php?del_num=ok&bnc_num=$row[bnc_num]' title='$result_b[wr_content]'><font color='#858585'>확인</font></a>
이걸 붙여주니 원본글 확인안해도 목록에서 제거가 되네요.
그럼 이제 체크박스 넣어서 일괄적으로 목록에서 제거가 되면 좋겠는데... 여튼 좋네요~^^
전체 93 |RSS
그누4 팁자료실 내용 검색

회원로그인

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