让discuz X2 支持@通知功能
众所周知,从discuz X2.5开始,就支持@通知功能。
而如果论坛是X2.0 并且还不能升级到X2.5的站长来说,这都是个说不出的痛。
经过一段时间的研究,终于找到了discuz X2.5上面的@他人的相关代码,并且将代码顺利的转移到discuz X2.0 上面,虽然说还是有点点不方便的地方,但是总比没有的强,是吧?~~
1. 在发新帖子时发送@通知。
首先,打开source/include/post/下的post_newthread.php文件,找到大概447行处
也可以查找这句代码
$bbcodeoff = checkbbcodes($message, !empty($_G['gp_bbcodeoff']));
再他的上面添加如下代码:
if($_G['group']['allowat']) { $atlist = $atlist_tmp = array(); preg_match_all("/@([^\r\n]*?)\s/i", $message, $atlist_tmp); $atlist_tmp = array_slice(array_unique($atlist_tmp[1]), 0, $_G['group']['allowat']); if(empty($_G['setting']['at_anyone'])) { $query = DB::query("SELECT `fuid`,`fusername` from `pre_home_friend` where `uid` = ".$_G['uid']." and `fusername` IN ('".implode("','",$atlist_tmp)."');"); while($row = DB::fetch($query)) { $atlist[$row['fuid']] = $row['fusername']; } } else { $query = DB::query("SELECT `uid`,`username` FROM `pre_common_member` WHERE `username` IN ('".implode("','",$atlist_tmp)."')"); while($row = DB::fetch($query)) { $atlist[$row['uid']] = $row['username']; } } if($atlist) { foreach($atlist as $atuid => $atusername) { $atsearch[] = "/@".str_replace('/', '\/', preg_quote($atusername))." /i"; $atreplace[] = "[url=home.php?mod=space&uid=$atuid]@{$atusername}[/url] "; } $message = preg_replace($atsearch, $atreplace, $message.' ', 1); } }
再找到大概550行,找到
if($modnewthreads) {
在函数内添加如下代码:
if($_G['group']['allowat'] && $atlist) { foreach($atlist as $atuid => $atusername) { notification_add($atuid, 'at', 'at_message', array( 'from_id' => $tid, 'from_idtype' => 'at', 'buyerid' => $_G['uid'], 'buyer' => $_G['username'], 'tid' => $tid, 'pid' => $pid, 'subject' => $subject, 'message' => messagecutstr($message, 150), )); } }
发表新帖子@通知别人就到一段落了。
2. 在回复中添加@通知
打开source/include/post/下的post_newreply.php文件,在大概326行处找到
$bbcodeoff = checkbbcodes($message, !empty($_G['gp_bbcodeoff']));
在代码上面添加如下代码:
if($_G['group']['allowat']) { $atlist = $atlist_tmp = array(); preg_match_all("/@([^\r\n]*?)\s/i", $message, $atlist_tmp); $atlist_tmp = array_slice(array_unique($atlist_tmp[1]), 0, $_G['group']['allowat']); if(empty($_G['setting']['at_anyone'])) { $query = DB::query("SELECT `fuid`,`fusername` from `pre_home_friend` where `uid` = ".$_G['uid']." and `fusername` IN ('".implode("','",$atlist_tmp)."');"); while($row = DB::fetch($query)) { $atlist[$row['fuid']] = $row['fusername']; } } else { $query = DB::query("SELECT `uid`,`username` FROM `pre_common_member` WHERE `username` IN ('".implode("','",$atlist_tmp)."')"); while($row = DB::fetch($query)) { $atlist[$row['uid']] = $row['username']; } } if($atlist) { foreach($atlist as $atuid => $atusername) { $atsearch[] = "/@".str_replace('/', '\/', preg_quote($atusername))." /i"; $atreplace[] = "[url=home.php?mod=space&uid=$atuid]@{$atusername}[/url] "; } $message = preg_replace($atsearch, $atreplace, $message.' ', 1); } }
然后再找到376行处,找到
useractionlog($_G['uid'], 'pid');
在后面添加如下代码:
if($_G['group']['allowat'] && $atlist) { foreach($atlist as $atuid => $atusername) { notification_add($atuid, 'at', 'at_message', array( 'from_id' => $_G['tid'], 'from_idtype' => 'at', 'buyerid' => $_G['uid'], 'buyer' => $_G['username'], 'tid' => $_G['tid'], 'subject' => $thread['subject'], 'pid' => $pid, 'message' => messagecutstr($message, 150) )); } }
修改回帖发送通知就到此为止。
3. 添加@提示语言文字
打开source/language/lang_notification.php 文件,添加如下语句到文档的最后面
'at_message' => '<a href="home.php?mod=space&uid={buyerid}" target="_blank">{buyer}</a> 在主题 <a href="forum.php?mod=redirect&goto=findpost&ptid={tid}&pid={pid}" target="_blank">{subject}</a> 中提到了您<div class="quote"><blockquote>{message}</blockquote></div><a href="forum.php?mod=redirect&goto=findpost&ptid={tid}&pid={pid}" target="_blank">现在去看看</a>。',
到此,添加代码部分就告一段落。
4. 设置参数
修改网站根目录下面的forum.php,添加如下参数
$_G['group']['allowat'] = 5; //@的条数 $_G['setting']['at_anyone'] = 1; //@任何人
其中$_G[‘setting’][‘at_anyone’] = 1 为允许@所有用户,设置0为只能@自己的好友。
$_G[‘group’][‘allowat’] = 5 允许用户最多@的人数为5个,超出后系统不解析。
如果想单独设置用户组的某个参数,那就要改1,2点中的代码实现。
5. 温馨提醒:
1. @跟好友名字不能分开 2. 必须在名字后面加一个空格 3. 发表后编辑不会发送@通知信息
6. 结语
经过一番折腾,终于能在discuz X2上面使用@功能了,好高兴啊。
其实有些事情就是非常容易而且非常容易实现的,就看你有没有这个心思去思考这个问题了。
———-Post By 柠之漠然 2013年8月11号 18点17分
【声明】本文 让discuz X2 支持@通知功能 为柠之漠然原创文章,转载请注明出自
枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2013/08/discuz-x2-at/ , 转载请保留本声明!