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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!

그누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개

글쵸? ㅋㅋ
저 긴 코드에서 쓸만한 것은

preg_match_all('/@(\S+?)/iU', $wr_content, $matches, PREG_SET_ORDER)

하나밖에 없어요.. ^^;
@오육칠팔 @견해★ @아는즐거움
감사드립니다. ^^
(이렇게 @.. 를 자꾸 쓰다보면, sir 리자님도 언젠가 적용하실까요? ^^)
와 진짜 좋은 기능이예요 ^^ 추천추천!

로그인한 회원만 이용하고 (비회원은 쪽지 이용할 수 없듯이), 멘션을 관리자한테만 보낼 수는 없을까요? 회원끼리 주고받는 거 허용하고 싶지 않아서요.
비회원제한은,
위 전체 코드를
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
(회원아이디는 아니지만, 적용될 패턴에 해당하는 문자열의 색이 변환되었습니다.)
버전문제가 아니라면.. 글쎄요.. ^^;
전체 29 |RSS
그누4 팁자료실 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 추천 조회
  • 게시물이 없습니다.

회원로그인

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