글, 댓글에서 멘션 사용하기 정보
글, 댓글에서 멘션 사용하기본문
글이니 댓글에서 @회원별명 을 넣으면, 해당 회원에게, 해당 글/댓글의 링크가 담긴 쪽지를 보내는 코드입니다.
글내의 멘션처리는, 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에서는 동작하지않나요?