글, 댓글에서 멘션 사용하기 정보
글, 댓글에서 멘션 사용하기
본문
            
            
                        글이니 댓글에서 @회원별명 을 넣으면, 해당 회원에게, 해당 글/댓글의 링크가 담긴 쪽지를 보내는 코드입니다.
글내의 멘션처리는, write_update.skin.php 에 다음 코드를 넣습니다.
댓글내의 맨션은 write_comment_update.skin.php 에 다음 코드를 넣습니다.. 차이점은, 중간에 링크를 만드는 wr_id만 다릅니다. :)
                
                
                글내의 멘션처리는, write_update.skin.php 에 다음 코드를 넣습니다.
//멘션
if (preg_match_all('/@(\S+?)/iU', $wr_content, $matches, PREG_SET_ORDER)) {
	$link = "{$g4['url']}/bbs/board.php?bo_table={$bo_table}&wr_id={$wr_id}";
	$mentioned_list = Array();
	foreach ($matches as $v) {
		if (array_search($v[1], $mentioned_list) === false) $mentioned_list[] = $v[1];
	}
	
	foreach ($mentioned_list as $mentioned) {
		$receiver = sql_fetch(" SELECT * FROM {$g4['member_table']} WHERE mb_nick = '{$mentioned}' ");
		if (isset($receiver['mb_id']) && $receiver['mb_id']!=$member['mb_id']) {
			// memo_id
			$tmp_row = sql_fetch(" SELECT MAX(me_id) AS max_me_id FROM {$g4['memo_table']} ");
			$me_id = $tmp_row['max_me_id'] + 1;
			// 쪽지 작성
			sql_query(" INSERT INTO {$g4['memo_table']}
							( me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo )
							VALUES ( '$me_id', '{$receiver['mb_id']}', '{$member['mb_id']}', '{$g4['time_ymdhis']}', '{$member['mb_nick']}님이 [{$board['bo_subject']}] 게시판의 글에서 멘션을 남기셨습니다. {$link}' ) ");
			// 실시간 쪽지 알림 기능
			sql_query(" UPDATE {$g4['member_table']} SET mb_memo_call = '{$member['mb_id']}' WHERE mb_id = '{$receiver['mb_id']}' ");
		}
	}
}
댓글내의 맨션은 write_comment_update.skin.php 에 다음 코드를 넣습니다.. 차이점은, 중간에 링크를 만드는 wr_id만 다릅니다. :)
//멘션
if (preg_match_all('/@(\S+?)/iU', $wr_content, $matches, PREG_SET_ORDER)) {
	$link = "{$g4['url']}/bbs/board.php?bo_table={$bo_table}&wr_id={$comment_id}";
	$mentioned_list = Array();
	foreach ($matches as $v) {
		if (array_search($v[1], $mentioned_list) === false) $mentioned_list[] = $v[1];
	}
	
	foreach ($mentioned_list as $mentioned) {
		$receiver = sql_fetch(" SELECT * FROM {$g4['member_table']} WHERE mb_nick = '{$mentioned}' ");
		if (isset($receiver['mb_id']) && $receiver['mb_id']!=$member['mb_id']) {
			// memo_id
			$tmp_row = sql_fetch(" SELECT MAX(me_id) AS max_me_id FROM {$g4['memo_table']} ");
			$me_id = $tmp_row['max_me_id'] + 1;
			// 쪽지 작성
			sql_query(" INSERT INTO {$g4['memo_table']}
							( me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo )
							VALUES ( '$me_id', '{$receiver['mb_id']}', '{$member['mb_id']}', '{$g4['time_ymdhis']}', '{$member['mb_nick']}님이 [{$board['bo_subject']}] 게시판의 댓글에서 멘션을 남기셨습니다. {$link}' ) ");
			// 실시간 쪽지 알림 기능
			sql_query(" UPDATE {$g4['member_table']} SET mb_memo_call = '{$member['mb_id']}' WHERE mb_id = '{$receiver['mb_id']}' ");
		}
	}
}
                    
                        
                추천
                
6
                
    6
댓글 29개

                
                    감사합니다 계속 탐났는데 말이죠.
그런데 로직이 이미 머리속에 나왔네요 ㅠ.ㅠ;
                    그런데 로직이 이미 머리속에 나왔네요 ㅠ.ㅠ;

                
                    추천@!!
적용해 보겠습니다
                    적용해 보겠습니다

                
                    참치!!                
                
                
            
                    
                
                    정규식씨랑 친하면 못 짤게 없단 말이 새삼 떠오르네요 ㅎㅎㅎ                
                
                
            
                    
                
                    글쵸? ㅋㅋ
저 긴 코드에서 쓸만한 것은
preg_match_all('/@(\S+?)/iU', $wr_content, $matches, PREG_SET_ORDER)
하나밖에 없어요.. ^^;
                    저 긴 코드에서 쓸만한 것은
preg_match_all('/@(\S+?)/iU', $wr_content, $matches, PREG_SET_ORDER)
하나밖에 없어요.. ^^;

                
                    겸손쟁이 전진님 우후훗~                
                
                
            
                    
                
                    @Terroboy @진서기 @지운아빠  모두 감사합니다. ^^;                
                
                
            
                    
                
                    @Terroboy @진서기 @지운아빠님 댓글감사하구요
@전진님 좋은 자료 감사드립니다
                    @전진님 좋은 자료 감사드립니다
                
                    추천!                
                
                
            
                    
                
                    신기하네요. 유용한 정보 감사합니다.                
                
                
            
                    
                
                    @오육칠팔 @견해★ @아는즐거움 
감사드립니다. ^^
(이렇게 @.. 를 자꾸 쓰다보면, sir 리자님도 언젠가 적용하실까요? ^^)
                    감사드립니다. ^^
(이렇게 @.. 를 자꾸 쓰다보면, sir 리자님도 언젠가 적용하실까요? ^^)
                
                    와 진짜 좋은 기능이예요 ^^ 추천추천!
로그인한 회원만 이용하고 (비회원은 쪽지 이용할 수 없듯이), 멘션을 관리자한테만 보낼 수는 없을까요? 회원끼리 주고받는 거 허용하고 싶지 않아서요.
                    로그인한 회원만 이용하고 (비회원은 쪽지 이용할 수 없듯이), 멘션을 관리자한테만 보낼 수는 없을까요? 회원끼리 주고받는 거 허용하고 싶지 않아서요.

                
                    비회원제한은,
위 전체 코드를
if ($member && $member['mb_id']) {
...
}
로 감싸면 되시고요..
멘션을 관리자한테만 보내는 거라면, 별명으로 멘션한다는 의미가 있을지 모르겠네요.. ^^;
어쨋든 관리자한테만 보내게 하시려면 중간의 SELECT 부분을
sql_fetch(" SELECT * FROM {$g4['member_table']} WHERE mb_nick = '{$mentioned}' AND mb_level=10 ");
처럼 회원레벨로 제한을 주는 방법 등 여러가지로 제한을 두고 사용하실 수 있습니다.
                    위 전체 코드를
if ($member && $member['mb_id']) {
...
}
로 감싸면 되시고요..
멘션을 관리자한테만 보내는 거라면, 별명으로 멘션한다는 의미가 있을지 모르겠네요.. ^^;
어쨋든 관리자한테만 보내게 하시려면 중간의 SELECT 부분을
sql_fetch(" SELECT * FROM {$g4['member_table']} WHERE mb_nick = '{$mentioned}' AND mb_level=10 ");
처럼 회원레벨로 제한을 주는 방법 등 여러가지로 제한을 두고 사용하실 수 있습니다.
                
                    감사합니다~                
                
                
            
                    
                
                    혹시 @전진 이렇게 멘션 작성하면 댓글이나 글에서 색깔이나 굵기 다르게 표시할 수 있을까요?ㅠㅠ                
                
                
            
                    
                
                    view.skin.php와 view_comment.skin.php 에서, 
비슷한 정규식을 contents에, preg_replace 를 이용하여 원하시는 스타일로 변경하면 되지 않을까 합니다.
                    비슷한 정규식을 contents에, preg_replace 를 이용하여 원하시는 스타일로 변경하면 되지 않을까 합니다.

                
                    대략 아래 같은식으로 하면 되지 않을까 합니다.
$str = preg_replace('/@(\S+?)/iU', '<span style="color:red; font-weight:bold">$1</span>', $str);
스타일은 원하시는 대로 바꾸시면 되겠죠? ^^
                    $str = preg_replace('/@(\S+?)/iU', '<span style="color:red; font-weight:bold">$1</span>', $str);
스타일은 원하시는 대로 바꾸시면 되겠죠? ^^
                
                    전진님 감사합니다. 뎃글에만 적용이 되네요. 그누 최신버전에 본문 멘션 되나요?                
                
                
            
                    
                
                    음.. 제가 사용했던 그누보드는 DTD 버전이었지만,
어짜피 본문내에 @회원닉네임 형태를 찾는 것이기에
그누 버전에 상관없이 작동할 것 같은데요?
                    어짜피 본문내에 @회원닉네임 형태를 찾는 것이기에
그누 버전에 상관없이 작동할 것 같은데요?
                
                    저도 덧글에만 적용이 되고, 본문에 글 작성시에 @별명을 쓰면 작동하지 않고 있어요... 
본문에서도 적용시킬려면 어떻게 해야 되나요?
                    본문에서도 적용시킬려면 어떻게 해야 되나요?

                
                    첫번째 코드를 write_update.skin.php 에 추가하시면 될텐데요?
아, 위 코드는 g4 버전 용이니, g5에서는 작동하지 않겠네요..
(아마도 $g4 변수만 $g5 로 바꾸면 되지 않을까 하지만. .확실친 않네요.. ^^;)
                    아, 위 코드는 g4 버전 용이니, g5에서는 작동하지 않겠네요..
(아마도 $g4 변수만 $g5 로 바꾸면 되지 않을까 하지만. .확실친 않네요.. ^^;)
                
                    그누보드4 사용하는데요.
위코드를 write_update.skin.php에 추가해도 작동을 하지 않더라구요.
                    위코드를 write_update.skin.php에 추가해도 작동을 하지 않더라구요.

                
                    음.. 그러면 이유를 모르겠네요..
저도 그렇고 다른 분들도, 문제가 발생하지 않았으니..
코드상으로 다른 코드와 충돌할 만한 내용도 없고요.. ^^;
                    저도 그렇고 다른 분들도, 문제가 발생하지 않았으니..
코드상으로 다른 코드와 충돌할 만한 내용도 없고요.. ^^;
                
                    조기 윗분중 Giso님도 본문에서는 안되고 댓글만 된다고 하시는데...
저도 몇군데 사이트에 적용을 해봐도 안되서요~ ^^;
                    저도 몇군데 사이트에 적용을 해봐도 안되서요~ ^^;
                
                    제가 테스트를 여러번 해본 결과...본문에 그냥 @별명만 쓰면 쪽지가 날아가는데...
@별명과 내용글을 함께 쓰면 안되네요...
                    @별명과 내용글을 함께 쓰면 안되네요...

                
                    g4dtd 버전에서 정상적으로 사용하고 있습니다.
http://study.gnuboard.org/bbs/board.php?bo_table=cm_free&wr_id=105
(회원아이디는 아니지만, 적용될 패턴에 해당하는 문자열의 색이 변환되었습니다.)
버전문제가 아니라면.. 글쎄요.. ^^;
                    http://study.gnuboard.org/bbs/board.php?bo_table=cm_free&wr_id=105
(회원아이디는 아니지만, 적용될 패턴에 해당하는 문자열의 색이 변환되었습니다.)
버전문제가 아니라면.. 글쎄요.. ^^;
                
                    댓글이 아닌 
본문에서 내용적고 @회원별명 적어도 쪽지가 날아가는지요?
                    본문에서 내용적고 @회원별명 적어도 쪽지가 날아가는지요?

                
                    네, 잘 작동합니다. ^^                
                
                
            
                    
                
                    그누5에서는 동작하지않나요?