立即注册 登录
彼岸网 返回首页

天香公主的个人空间 http://www.bian-wang.com/discuz/?10005 [收藏] [复制] [分享] [RSS] txgz999@yahoo.com

日志

Discuz功能改进:如何用@来发通知

热度 5已有 2312 次阅读2014-11-20 11:30 PM |个人分类:Discuz|系统分类:社交网理论与实践

在一些论坛里,用户可以在贴子里写上另一个用户的用户名,并加一个@前缀,这样对方就会收到通知来看这个帖子。

下面是虎扑论坛里的一个例子:






下面我们尝试在Discuz系统的记录里加上这个功能。

1。 在source/language/lang_notification.php加入: 'doing_mention' => '{actor} 在 < a href="{url}" target="_blank">记录</a> 中提到了您', 2。 在source/include/spacecp/spacecp_doing.php里下面一段: if($updo['uid'] != $_G['uid']) { notification_add($updo['uid'], 'doing', 'doing_reply', array( 'url'=>"home.php?mod=space&uid=$updo[uid]&do=doing&view=me&doid=$updo[doid]&highlight=$newid", 'from_id'=>$updo['doid'], 'from_idtype'=>'doid')); updatecreditbyaction('comment', 0, array(), 'doing'.$updo['doid']); } 之后加入: if (preg_match_all("/(&nbsp;|\s|^)@(\S+)(&nbsp;|\s|$)/", $message, $matches)) { $result = array_unique($matches[2]); foreach($result as $ausername) { if(($auid = C::t('common_member')->fetch_uid_by_username($ausername))) { if (($auid != $_G['uid']) && ($auid != $updo['uid'])) { notification_add($auid, 'comment', 'doing_mention', array( 'url'=>"home.php?mod=space&uid=$auid&do=doing&view=me&doid=$updo[doid]&highlight=$newid", 'from_id'=>$updo['doid'], 'from_idtype'=>'doid')); } } } } 下面是效果图:





以上只是讨论下做法,不足为据。 类似的可以将这个功能引入日志及其评论中,在这里就不讨论了。

注:本文中的代码里的某些<符号后人为加了一个不应该有的空格,以避免Discuz在保存日志时自动改变日志内容。

5/1/2016补充:经网友sesemule提醒,发现原来的代码只处理了记录里的回复部分,没处理记录本身。要支持记录本身的话,还要做下面的改动:
3。 在source/include/spacecp/spacecp_doing.php里下面一句: C::t('common_member_field_home')->update($_G['uid'], $setarr); 之后加入: if (preg_match_all("/(&nbsp;|\s|^)@(\S+)(&nbsp;|\s|$)/", $message, $matches)) { $result = array_unique($matches[2]); foreach($result as $ausername) { if(($auid = C::t('common_member')->fetch_uid_by_username($ausername))) { if ($auid != $_G['uid']) { notification_add($auid, 'comment', 'doing_mention', array( 'url'=>"home.php?mod=space&uid=$auid&do=doing&view=me&doid=$newdoid&highlightdoing=$newdoid", 'from_id'=>$updo['doid'], 'from_idtype'=>'doid')); } } } } 4。 在source/include/space/space_doing.php里将下面这句 $uids = $_GET['highlight'] ? array() : array($space['uid']); 改成: $uids = ($_GET['highlight'] || $_GET['highlightdoing']) ? array() : array($space['uid']); 5。 在source/include/space/space_doing.php里下面这段: $query = C::t('home_doing')->fetch_all_search($start, $perpage, 1, $uids, '', $searchkey, '', '' ,'', 1, $doid, $f_index); foreach($query as $value) { 之后加入: if($_GET['highlightdoing'] && $value['doid'] == $_GET['highlightdoing']) { $value['style'] .= 'color:#F60;'; } 6。在template/default/home/space_doing.htm里将下面这句 <dd class="{if empty($diymode)}ptm{else}ptw{/if} xs2"> 改成: <dd class="{if empty($diymode)}ptm{else}ptw{/if} xs2" style="$dv[style]">
相关代码下载: http://www.bian-wang.com/upload/txgz_doing_at_notification_160502a.zip

5/16/2016补充:应网友sesemule的要求,把这个功能扩展到日志及其评论:
1)加汉字:在文件 source/language/lang_notification.php 中加入:
'blog_mention' => '{actor} 在 < a href="{url}" target="_blank">日志</a> 中提到了您', 'blogcomment_mention' => '{actor} 在 < a href="{url}" target="_blank">日志评论</a> 中提到了您', 2)日志的通知:在文件 source/include/spacecp/spacecp_blog.php 里的下面这段
if($newblog = blog_post($_POST, $blog)) { if(empty($blog) && $newblog['topicid']) { $url = 'home.php?mod=space&uid='.$_G['uid'].'&do=topic&topicid='.$newblog['topicid'].'&view=blog&quickforward=1'; } else { $url = 'home.php?mod=space&uid='.$newblog['uid'].'&do=blog&quickforward=1&id='.$newblog['blogid']; } 后加入 if (preg_match_all("/(&nbsp;|\s|^)@(\S+)(&nbsp;|\s|$)/", $_POST['message'], $matches)) { $n_url = 'home.php?mod=space&uid='.$newblog['uid'].'&do=blog&id='.$newblog['blogid']; $result = array_unique($matches[2]); foreach($result as $ausername) { if(($auid = C::t('common_member')->fetch_uid_by_username($ausername))) { if ($auid != $_G['uid']) { notification_add($auid, 'comment', 'blog_mention', array('url'=>$n_url)); } } } } 3)日志评论的通知:
3a)新评论:在文件 source/include/spacecp/spacecp_comment.php 里的下面这段
$cidarr = add_comment($message, $id, $idtype, $cid); 后加入 if ($idtype == 'blogid') { if (preg_match_all("/(&nbsp;|\s|^)@(\S+)(&nbsp;|\s|$)/", $message, $matches)) { if($cidarr['cid'] != 0 && $comment = C::t('home_comment')->fetch($cidarr['cid'], $_G['uid'])) { $n_url = "home.php?mod=space&uid=$comment[uid]&do=blog&id=$id&cid=$cidarr[cid]"; $result = array_unique($matches[2]); foreach($result as $ausername) { if(($auid = C::t('common_member')->fetch_uid_by_username($ausername))) { if ($auid != $_G['uid']) { notification_add($auid, 'comment', 'blogcomment_mention', array('url'=>$n_url)); } } } } } } 3b)修改评论: 在文件 source/include/spacecp/spacecp_comment.php 里的下面这段
C::t('home_comment')->update($comment['cid'], array('message'=>$message, 'status'=>$comment_status)); 后加入 if ($comment['idtype'] == 'blogid') { if (preg_match_all("/(&nbsp;|\s|^)@(\S+)(&nbsp;|\s|$)/", $message, $matches)) { $n_url = "home.php?mod=space&uid=$comment[uid]&do=blog&id=$comment[id]&cid=$cid"; $result = array_unique($matches[2]); foreach($result as $ausername) { if(($auid = C::t('common_member')->fetch_uid_by_username($ausername))) { if ($auid != $_G['uid']) { notification_add($auid, 'comment', 'blogcomment_mention', array('url'=>$n_url)); } } } } }

发表评论 评论 (130 个评论)

回复 carry0987 2017-2-21 12:57 AM
天香公主: 用iPad在你的网站试过了没问题(abc999),等过几天借个iPhone再试试。你自己不妨也再试试看?
這是測試過程:
https://qbnehs.besv.net/video/testvideo1.mov
回复 天香公主 2017-2-21 12:15 AM
carry0987: 電腦沒這個問題,php7.0,是用dz帶的功能加的
https://www.fucknehs.com
用iPad在你的网站试过了没问题(abc999),等过几天借个iPhone再试试。你自己不妨也再试试看?
回复 carry0987 2017-2-20 09:33 PM
天香公主: 不知是哪个网站?我想去试试。在电脑里有同样问题吗?PHP版本?这个图片是用Discuz带着的功能加的,还是用了我添加的一键贴? ...
電腦沒這個問題,php7.0,是用dz帶的功能加的
https://www.fucknehs.com
回复 天香公主 2017-2-20 04:25 PM
carry0987: 天香,X3.3的日至功能貌似有問題...我用iPhone寫了一篇圖片日誌,結果卻沒有圖片,反而出現一堆代碼..
...
不知是哪个网站?我想去试试。在电脑里有同样问题吗?PHP版本?这个图片是用Discuz带着的功能加的,还是用了我添加的一键贴?
回复 carry0987 2017-2-20 02:50 PM
天香,X3.3的日至功能貌似有問題...我用iPhone寫了一篇圖片日誌,結果卻沒有圖片,反而出現一堆代碼..
回复 carry0987 2017-2-19 10:22 PM
天香公主: 我在Chrome里打开Developer Tools。将鼠标放在白条上,右击选择inspect,在Elements tab下看到被选的是一个p。右击选择Hide element后,白条还在,说明白条与它无 ...
太厲害了......原來可以這樣用....謝謝天香
回复 天香公主 2017-2-19 10:20 PM
carry0987: 你怎麼找到的?!我用Firebug也沒看到...只有顯示部分style.css的內容...
我在Chrome里打开Developer Tools。将鼠标放在白条上,右击选择inspect,在Elements tab下看到被选的是一个p。右击选择Hide element后,白条还在,说明白条与它无关。继续点击这个p的parent element,  同样右击选择Hide element后看白条在不在。一层层上去,直到发现一个div,选择Hide element后白条不见了,从右端窗口的filter列表里就看到它有个背景图片。
回复 carry0987 2017-2-19 09:34 PM
天香公主: 哦,这个白色长条是 https://www.fucknehs.com/static/space/t2/images/ct-bottom.png,用在static/space/t2/style.css里的下面这句里
body#space #ft { backgro ...
你怎麼找到的?!我用Firebug也沒看到...只有顯示部分style.css的內容...
回复 天香公主 2017-2-19 08:16 PM
carry0987: 呃,不是,我講清楚一點我的問題好了,我想知道是什麼原因導致footer的部分在個人空間會出現一條白色的東西?而在首頁卻不會出現?
[img]http://i.imgur.com/LxLZP ...
哦,这个白色长条是 https://www.fucknehs.com/static/space/t2/images/ct-bottom.png,用在static/space/t2/style.css里的下面这句里
body#space #ft { background: url(images/ct-bottom.png) no-repeat 0 0; }
回复 carry0987 2017-2-19 02:09 AM
天香公主: 我不太明白你要到达的效果。但估计是要加个overflow: hidden; 至于加在哪里,可以在Firefox里用Firebug或Chrome里用Developer Tools检查下DOM结构就清楚了。 ...
呃,不是,我講清楚一點我的問題好了,我想知道是什麼原因導致footer的部分在個人空間會出現一條白色的東西?而在首頁卻不會出現?
回复 天香公主 2017-2-18 10:56 PM
carry0987: 天香,這個白色的東西好像是因為動態的那個模塊長度太常導致將白色的頁面超出底線,要怎麼讓那個模塊的長度能夠自動縮短?(就是超過一定的長度後就不顯示)
[img]h ...
我不太明白你要到达的效果。但估计是要加个overflow: hidden; 至于加在哪里,可以在Firefox里用Firebug或Chrome里用Developer Tools检查下DOM结构就清楚了。
回复 carry0987 2017-2-18 06:05 AM
天香,這個白色的東西好像是因為動態的那個模塊長度太常導致將白色的頁面超出底線,要怎麼讓那個模塊的長度能夠自動縮短?(就是超過一定的長度後就不顯示)


連結:
https://www.fucknehs.com/home.php?mod=space&uid=1
回复 carry0987 2017-2-16 11:38 AM
天香公主: 看来你这个模版文件没问题,你知道文件里每行开始处的那些空格怎么会在产生的html代码里都不见了?
看來這個問題著實奇怪,坐等X3.3的最新版的代碼
回复 天香公主 2017-2-16 07:41 AM
carry0987: 天香,我在toptb那個欄位沒看到setHomepage呢,被綠色的東西取代了..

文件:
https://qbnehs.besv.net/test/useruplo ...
看来你这个模版文件没问题,你知道文件里每行开始处的那些空格怎么会在产生的html代码里都不见了?
回复 carry0987 2017-2-16 06:47 AM
天香,我在toptb那個欄位沒看到setHomepage呢,被綠色的東西取代了..

文件:
https://qbnehs.besv.net/test/userupload/1/header.htm
回复 carry0987 2017-2-16 01:04 AM
天香公主:    没有精力了
XD
回复 天香公主 2017-2-16 12:13 AM
carry0987: 你有興趣去看看X3.3的github嗎?很有趣呢,有任何問題都可以在上面提出欸~
   没有精力了
回复 carry0987 2017-2-16 12:01 AM
天香公主: 对,很奇怪。我也不知其所以然
你有興趣去看看X3.3的github嗎?很有趣呢,有任何問題都可以在上面提出欸~
回复 天香公主 2017-2-15 11:53 PM
carry0987: 只差一個空格?!變化這麼大?!我並沒有用任何方式改造網頁....唯一的可能是我把論壇升級到x3.3 20170120版
对,很奇怪。我也不知其所以然
回复 carry0987 2017-2-15 11:46 PM
天香公主: 把qu_loading放回去吧。你说的对,是那个FB插件引起的。我做了些测试。下图显示的是你那个网页的部分HTML源码,
[img]http://www.bian-wang.com/discuz/data/att ...
只差一個空格?!變化這麼大?!我並沒有用任何方式改造網頁....唯一的可能是我把論壇升級到x3.3 20170120版

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2017-2-26 05:16 PM , Processed in 0.064459 second(s), 20 queries.

返回顶部