PHP设计聊天室步步通(四)
3、调用信息发送程序,发布聊天者已经进入的信息
<script> parent.bl.document.open(); parent.bl.document.write( "<meta http-equiv='refresh' content='0;url=messagesend.php?name=<? print($name); ?>&&action=enter&&pass=<? print($pass); ?>'>" ) parent.bl.document.close(); </script>发言由messagesend.php处理完成,注意输出对象为bl,也就是处理发言的框架名称,这样保证发言框架的页面内容的完整
表情和动作
表情和动作极大的丰富了聊天的乐趣,一般的聊天室主要通过2种方法发送
(1) 按钮菜单的方法
通过在一个固定的下拉菜单里面进行选择,找到自己满意的表情,然后选中,按发送按钮发出
(2) 通过手工输入代号
比如网易的以手工输入 //hello 代表欢迎的一段动作,以 //bye 代表再见的一段动作表情
我们这里介绍菜单的具体实现方法,手工输入的不用介绍了吧! 哈哈!除非你记不住那些...
1 ,下拉菜单选择表情动作的实现
为了扩充方便,我们制作了表情动作的数据文件,这样在以后扩充时将会非常方便.
表情动作文件的格式如下($split代表分割符):
//1234$split[1234567,我的朋友在哪里1234!!!!!]
//$split很疑惑的看着对象...
//$split抓呀抓,把头皮都抓破了,也没有想出个所以然来。
//$split怎么回事?这到底是怎么回事
前面的//1234代表表情动作代码,分隔符后面的代表显示的表情动作注意其中的 对象 两个字将会在显示时替换成为发言对象的名字
这段代码用于把菜单选择的对应的表情动作代码写到发送栏里面
<script> function changemote($newemote) { document.inputform.msg.value = $newemote } </script>这段代码生成动态下来菜单
<select name= "select" onchange= "changemote(this.options[this.selectedIndex].value)" > <option value= "0" selected>动作</option> <? $emotemsg = file($emotefilename); for ($i=0;$i<count($emotemsg);$i++) { $msg = split($split,$emotemsg[$i],99); print( "<option value=$msg[0]>$msg[1]</option>" ); } ?> </select>这样就完成了从菜单选动作表情的过程
2 ,表情动作在发言处理程序里的处理过程
messagesend.php
<? //读入表情动作文件 $emote3 = file( $emotefilename ); $emote3number = count ( $emote3 ); for ( $kk =0; $kk < $emote3number ; $kk ++) { //分割每个表情动作 $emote =split( $split , chop ( $emote3 [ $kk ]),99); //如果发言内容等于表情动作 if ( $message == $emote [0]) { //替换表情动作里面的 对象 为实际的聊天对象名字 $emote [1]= ereg_replace ( "对象" , "<font color=red>$talkto</font>" , $emote [1]); //发言内容改为动作表情的内容 $message = "<a href=javascript:parent.cs( '$name' ) target=d> $name </a >". $emote [1]; break ; } } ?>这样我们就实现了表情和动作,如果做一个自动添加动作表情的程序功能,更会增加聊天的娱乐性!
帖图
如果在聊天文字中能增加一些美丽的图片.......
图片代码的生成和表情动作一样,可以菜单选择也可以手工输入,这里只给出格式和代码,不再解释,请察看 表情于动作部分
1 文件格式
//$picturefilename
1$split咖啡色西服$splitxw20151.jpg$split
2$split黑色燕尾服$splitxw201534.jpg$split
编号+名称+图片名称+
2 程序
我的聊天室采用 ///gift+编号的方法显示图片,注意是三个反斜杠,区别于表情动作
<? //判断发言的内容最前面的7个字符是否是 ///gift if ( substr ( $message ,0,7) == "///gift" ) { //取得图片的编号,从第7个字符开始的2个字符(注意,字符从0开始编号) $id = substr ( $message ,7,2)-1; //读入图片文件 $giftmsg = file( $picturefilename ); //判断是否编号合法 if (( $id >= 0) && ( $id < count ( $giftmsg )) ) { //分割图片行 $gift =split( $split , $giftmsg [ $id ],99); //生成图片的发言内容 $message ="<a href=javascript:parent.cs( '$name' ) target=d><font col or = $namecolor > $name </font></a>送给<a href=javascript:parent.cs(' $talkt o ') target=d>$talkto</a>一个$gift[1]<img src=' images/ $gift [2]' width=6 0 height=60 border=0></font>"; //图片生成成功标志 $specialsign = 1; } }密谈的实现
每个聊天室都提供了密谈功能,来为那些需要私下里进行交流的聊友提供方便,这里把我的聊天室实现私聊的方法介绍如下:
1 对发送信息的处理
每句私聊都要显示在自己和私聊对象的屏幕上,而其他人不能够看到.这里先对发言内容进行处理,然后再保存到发言文件里面!
//$split为分隔符号
messagesend.php
<? //判断是否私聊发言 if ( $secret == "on" ) { //在发言前面加上标记<!--+私聊标记+对象+发言者+--> 其中+代表分隔符 //第一个标记为 secret 表示为私聊,后面的是聊天对象和自己的名字,保证这两个人能看到 $message = "<!-- $splitsecret $split $talkto $split $name $split --><font c olor=ff0000>密谈</font> $message "; } else { //如果第一个标记为 open 表示公开,后面同样为对象和自己的名字 $message = "<!--$splitopen$split$talkto$split$name$split-->$message" ; } //然后保存到文件中 ?>2 显示私聊的方法
对每个新的发言读入后先进行处理判断,在主动刷新程序里面进行.
messageflush.php
<? //分割发言内容 $tempmessage = split( $split , $message [0],99); //如果发言不是密谈,或者私聊对象是自己,或者发送这句私聊的是自己,那就显示这句话,否则不显示 if ( ( $tempmessage [1] != "secret" ) || ( $tempmessage [2] == $name ) || ( $tempmessage [3] == $name ) ) { //显示私聊 print( "parent.u.document.writeln(" $message [0] ");rn" ); } ?>通过这种简单的方法,我们实现了私聊,
注意:
前面的保存文件处理时,对发言的判断文字前后有<!-- 和 -->这样在屏幕显示时就可以不用特殊处理了!
查看更多关于PHP设计聊天室步步通(四) - 综合实例的详细内容...