Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

X2 群聊消息

[复制链接]
云天一 发表于 2011-4-29 12:30:52 | 显示全部楼层 |阅读模式
本帖最后由 云天一 于 2011-4-29 12:31 编辑

*************************************************
** 本教程基于版本:Discuz! X 2.0                                         **
*************************************************

Discuz! 2.0 在短消息方面增加了一个群聊的功能,在这里介绍一下群聊刷新显示数据的过程

群聊的刷新可以在后台 全局 - 站点功能 -  其他 里面设置  群聊消息内容自动刷新间隔(秒)

从程序上我们可以看到 模板文件 ./template/default/home/space_pm.htm 文件输出了js

  1. <script type="text/javascript">
  2. var refresh = true;
  3. var refreshHandle = -1;
  4. var autorefresh = {$refreshtime};
  5. </script>

复制代码
  1. <script type="text/javascript">
  2.         var msgListObj = $('msglist');
  3.         msgListObj.scrollTop = msgListObj.scrollHeight;
  4. function succeedhandle_pmsend(url, msg, values) {
  5.         var pObj = document.createElement("p");
  6.         pObj.className = 'xg1 mbn';
  7.         pObj.innerHTML = '<a href="home.php?mod=space&uid=$_G[uid]" target="_blank" class="xi2">$_G[username]</a> &nbsp;'+ "{lang just_now}";
  8.         var pObjmsg = document.createElement("p");
  9.         pObjmsg.className = 'mbm';
  10.         var pmMsg = $('replymessage');
  11.         pObjmsg.innerHTML = bbcode2html(parseurl(pmMsg.value));
  12.         msgListObj.appendChild(pObj);
  13.         msgListObj.appendChild(pObjmsg);
  14.         msgListObj.scrollTop = msgListObj.scrollHeight;
  15.         pmMsg.value = "";
  16.         showCreditPrompt();
  17. }

  18.         function refreshMsg(refreshnow) {
  19.                 if(refresh) {
  20.                         if(autorefresh <= 0 || refreshnow){
  21.                                 var x = new Ajax();
  22.                                 x.get('home.php?mod=spacecp&ac=pm&op=showchatmsg&inajax=1&daterange=$daterange&plid=$plid', function(s){
  23.                                         msgListObj.innerHTML = s;
  24.                                         msgListObj.scrollTop = msgListObj.scrollHeight;
  25.                                 });
  26.                                 autorefresh = {$refreshtime};
  27.                         }
  28.                         <!--{if $refreshtime}-->
  29.                         $('refreshtip').innerHTML = autorefresh + ' {lang next_refresh}';
  30.                         <!--{/if}-->
  31.                         autorefresh -= 2;
  32.                 } else {
  33.                         window.clearInterval(refreshHandle);
  34.                 }
  35.         }
  36.         <!--{if $refreshtime}-->
  37.         refreshHandle = window.setInterval('refreshMsg(0);', 2000);
  38.         <!--{/if}-->
  39.         hideMenu();
  40. </script>
复制代码
当用户发表群聊时,程序通过 ajaxpost 向 home.php?mod=spacecp&ac=pm&op=send&pmid=$pmid&daterange=$daterange&handlekey=pmsend&pmsubmit=yes 地址提交表单

程序  ./source/include/spacecp/spacecp_pm.php  对post过来的数据进行处理入库后返回

home.php?mod=space&do=pm&subop=view&touid='.$touid 到 ajaxpost 中所指的 pmforum_return 对象中类似
  1. <span id="pmforum_return"><script type="text/javascript" reload="1">if(typeof succeedhandle_pmsend=='function') {succeedhandle_pmsend('home.php?mod=space&do=pm&subop=view&touid=0', '操作成功 ', {'pmid':'10'});}</script></span>
复制代码
则 js 执行 succeedhandle_pmsend 将消息输出显示出来


自动获取短消息过程是当后台设置了消息刷新的时间 则模板会输出显示
  1. refreshHandle = window.setInterval('refreshMsg(0);', 2000);
复制代码
即表示 群聊页会每 2 秒 执行一次 refreshMsg 函数

refreshMsg  函数 每次会在 群聊界面上显示 autorefresh 秒后刷新, autorefresh 该值最开始由后台所设置的刷新时间赋值

之后 每次递减2

当 autorefresh  值 减到0 时refreshMsg  执行 ajax 向 home.php?mod=spacecp&ac=pm&op=showchatmsg&inajax=1&daterange=$daterange&plid=$plid 请求

该地址包含的程序  ./source/include/spacecp/spacecp_pm.php  向 uc 接口取出最新的消息返回到函数
  1. function(s){
  2.                                         msgListObj.innerHTML = s;
  3.                                         msgListObj.scrollTop = msgListObj.scrollHeight;
  4.                                 }

复制代码
输出显示

同样用户可以点击 界面上的   autorefresh 秒后刷新 字样的进行手动刷新获得最新的群聊消息




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-24 01:00 , Processed in 0.020837 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表