글, 댓글에서 멘션 사용하기 > 그누4 팁자료실

그누4 팁자료실

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

글, 댓글에서 멘션 사용하기 정보

글, 댓글에서 멘션 사용하기

본문

글이니 댓글에서 @회원별명 을 넣으면, 해당 회원에게, 해당 글/댓글의 링크가 담긴 쪽지를 보내는 코드입니다.

글내의 멘션처리는, 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

댓글 29개

와 진짜 좋은 기능이예요 ^^ 추천추천!

로그인한 회원만 이용하고 (비회원은 쪽지 이용할 수 없듯이), 멘션을 관리자한테만 보낼 수는 없을까요? 회원끼리 주고받는 거 허용하고 싶지 않아서요.
비회원제한은,
위 전체 코드를
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 를 이용하여 원하시는 스타일로 변경하면 되지 않을까 합니다.
대략 아래 같은식으로 하면 되지 않을까 합니다.

$str = preg_replace('/@(\S+?)/iU', '<span style="color:red; font-weight:bold">$1</span>', $str);

스타일은 원하시는 대로 바꾸시면 되겠죠? ^^
음.. 제가 사용했던 그누보드는 DTD 버전이었지만,
어짜피 본문내에 @회원닉네임 형태를 찾는 것이기에
그누 버전에 상관없이 작동할 것 같은데요?
저도 덧글에만 적용이 되고, 본문에 글 작성시에 @별명을 쓰면 작동하지 않고 있어요...
본문에서도 적용시킬려면 어떻게 해야 되나요?
첫번째 코드를 write_update.skin.php 에 추가하시면 될텐데요?
아, 위 코드는 g4 버전 용이니, g5에서는 작동하지 않겠네요..
(아마도 $g4 변수만 $g5 로 바꾸면 되지 않을까 하지만. .확실친 않네요.. ^^;)
음.. 그러면 이유를 모르겠네요..
저도 그렇고 다른 분들도, 문제가 발생하지 않았으니..
코드상으로 다른 코드와 충돌할 만한 내용도 없고요.. ^^;
g4dtd 버전에서 정상적으로 사용하고 있습니다.
http://study.gnuboard.org/bbs/board.php?bo_table=cm_free&wr_id=105
(회원아이디는 아니지만, 적용될 패턴에 해당하는 문자열의 색이 변환되었습니다.)
버전문제가 아니라면.. 글쎄요.. ^^;
전체 1 |RSS
그누4 팁자료실 내용 검색

회원로그인

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