.

单层嵌套回复代码
分类:电脑知识 发表于:2012-11-28 17:10:18 评论(14)


应旅途兄的要求给留言和评论方式写个教程。其实教程啥的,我这也就是多个单层嵌套回复,现在单层嵌套回复都是满天飞的,倒没什么特别。我倒是觉得我那多级嵌套留言的才不错,耗死了我N多脑细胞才弄出来的,可惜已成了昨日黄花。。。

说到单层嵌套回复,不知道和别人的一样不一样,但我这个其实是挺简单的。

先介绍下表的构造,所有不管内容还是回复都是放在一起。打开我的表,就以“GB”命名好了,里面字段也就简单那么几个:

ID:自动编号的,不解释。

RE:数字,来区别此条是回复还是主留言内容。可选一个或留空表示主留言内容 ,这里以0为例;若为回复,则填上所回复留言的ID字段编号。

CONTENT:主留言内容或回复内容。

DATETIME:发表时间。

QQ:因我这需要QQ登录才能发表,用户资料是另有一个统计表的,这里的字段只是用来和那个表连接。而传统的留言本,可以把这个字段换掉,另外加名字、邮箱、网站等之类的信息,这里就不多讲了。

Article_ID:评论还需要加个所评论文章ID的字段,留言就不需要了。

接着介绍读取代码:

与之前嵌套留言的方式不同,这个需要对同个表检索两次。其实可以把主内容和回复内容分开放两个表的,这样检索的是不同的表,跟我嵌套留言的思路就有些像了,造成的负担也应该会小点。当然后期的统计就会有不小的麻烦。。。。额,还是别废话,继续吧。

★首先是连接表代码:

<%

set rs1=server.createobject("adodb.recordset")

sql="select * from (select * from GB where Re=0), 用户表 where GB.QQ = 用户表.id order by GB.ID desc"

rs1.open sql,conn,1,1

%>

★以上为用户资料另成一表的代码,将两个表连接起来一起读取;若为传统模式的,那就更简单了:

<%

set rs1=server.createobject("adodb.recordset")

sql="select * from GB where Re=0 order by ID desc"

rs1.open sql,conn,1,1

%>

★其中“where Re=0”是为了第一轮读取的时候只读取主内容,后面再读取回复内容。

★这之后加分页代码,这个大家都知道,就不放上来了。

<%while not rs1.eof and page>0%>

<ul class="FEnJi"><li><a href="博客地址" title="博客名称" target="_blank"><img src="头像地址" width="50"></a>

<div class="GBcontent" style="width:545px;"><b>用户名</b> (<%=rs1("datetime")%>)<br><%=replace(rs1("content"),chr(13),"<BR>")%> <%call ReplyGB(rs1("ID"),rs1("QQ"),rs1("content"))%></div>

★以上显示第一轮主留言内容,以下嵌套显示该留言的全部回复。

★还是先看用户资料另成一表的写法。

<%set rs2=conn.execute("select * from (select * from GB where Re="&rs1("ID") &"), 用户表 where GB.QQ = 用户表.id order by GB.datetime",recordsaffected,adcmdtext)%>

★再看传统模式的。

<%set rs2=conn.execute("select * from GB where Re="&rs1("ID") &" order by datetime",recordsaffected,adcmdtext)%>

★继续,嵌套的回复就不需要加分页代码了。

<%while not rs2.eof

Content2 = rs2("content")

%>

<ul class="FEnJi"><li> <a href="博客地址" title="博客名称" target="_blank"><img src="头像地址" width="40"></a>

<div class="GBcontent" style="width:490px;"><b>用户名</b> (<%=rs2("datetime")%>)<br><%=replace(Content2,chr(13),"<BR>")%> <%call ReplyGB(rs1("ID"),rs2("QQ"),Content2)%></div>

</li></ul>

<%

rs2.movenext

wend

rs2.close

set rs2=nothing

%>

</li></ul>

<%

rs1.movenext

page=page-1

wend

rs1.close

set rs1=nothing

%>

★整个读取代码就是这样了,其中用中文写的都是从用户表里读取的变量,传统模式的则直接把这些字段加进留言表“GB”内。

★其中提到的<%call ReplyGB()%>这段代码,就是实例中的”回复“,点击出现回复框的那个。

<%

Sub ReplyGB(ID_Pre,QQ_Pre,content_Pre)

Response.write "<SPAN class=""ShowOne""><a href=""javascript:void(0)"" class=""HuiFu"">回复</a>"

Response.write "<div class=""ShowInfo""><form method=""post"" action=""?Action=ReplyGB"">"

Response.write "<textarea rows=""3"" name=""content"" cols=""60""></textarea><input type=""hidden"" name=""ID_Pre"" value=""" & ID_Pre &"""><input type=""hidden"" name=""QQ_Pre"" value=""" & QQ_Pre &"""><input type=""hidden"" name=""content_Pre"" value=""" & content_Pre &""">"

Response.write "<br><input name=""post"" type=""submit"" value="" 提交 ""></form></div></SPAN>"

End Sub

%>

★此代码中第一个参数是获取当前留言内容的ID数,提交时写入RE字段的数据;第二个参数是获取留言者信息(若有多项信息,可再加入参数。如传统模式下,要发送回复邮件的话,这里就需要获取邮件地址的参数。);第三个参数是获取此留言的内容。第三个参数主要是为了发送回复邮件时,邮件里能显示所回复留言的内容,如果不需要发送回复邮件的,可以将此参数去掉。

★点击显示回复框,再次点击隐藏回复框。这里需要用到以下JS,另外别忘了载入jQuery。

<script language="javascript">

$(document).ready(function(){

$(".HuiFu").click(function(){

$(this).siblings("div").toggle(0);

});

});

</script>

★然后就是提交代码。这个应该不难写,上面需要获取的信息都已经有了,直接把它们写进数据库里就行了。

★最后介绍下统计某人的全部留言及评论的SQL代码。这里需要一个索引字段,我是用QQID索引的,传统模式可以用邮件地址,或名称,或网址当索引字段。当然,用这些的话,因为有时候不填,有时候填的不一样,所以统计结果难免不精确。这里先以email为例吧。

if request("TYPE") = "PL" then

sql="select * from (select * from 评论表 where email=" &request("email") &"),文章表 where 评论表.Article_ID=文章表.ID order by 评论表.ID desc"

else

sql="select * from GB where email=" &request("email") &" order by ID desc"

end if

★显示全部评论的SQL中用了嵌套select,是为了把评论内容和所评论的文章信息挂钩起来。

★终于完工了,写的应该还挺详细的吧。

  
邮箱: 密码:
  • 农夫三拳 (2013-01-05 16:06:01)
    眼花缭乱啊,能搞定无限嵌套回复的人都是大牛! 这家伙很懒
    • 阿和 博主 (2013-01-05 21:30:47)
      你那课差不多该学好了吧?以后得追着你的脚步喽。 
  • 木本無心 (2013-01-04 14:11:42)
    大体意思看懂了,现在没时间整这个了,pj其实也可以实现,需要时间啊。想想后怕啊。 想什么么?
    • 阿和 博主 (2013-01-05 21:27:33)
      PJ也是ASP的吧?那就可以通用的。 
  • wenmengxin (2012-12-04 10:33:12)
    我倒是认识星星。因为星星的都是注释。哈哈。 我确实很懒~
  • ︶ㄣ藍楓ゞ (2012-11-29 21:16:33)
    我看到了好多星星啊。只是我不喜欢,因为他们不漂亮。 http://shop35613977.taobao.com咱的淘宝话费充值店,大伙多多赏脸惠顾哈。
    • 阿和 博主 (2012-11-29 21:19:05)
      疯子只喜欢钱钱。。。生意做了几单啦? 
    • ︶ㄣ藍楓ゞ (2012-12-01 16:15:14)
      毛。都快有一年没订单的消息了。哎。其实我也想认识那些星星的,只是俺不懂。。。|= =| 
  • Lvtu 才高八斗 (2012-11-28 17:33:21)
    晕了。。。 得之,我幸;失之,我命。如是而已!
    • 阿和 博主 (2012-11-28 20:08:27)
      果然晕了。。。 
    • Lvtu 才高八斗 (2012-11-28 22:25:30)
      建议在回复中加个"@xxx" 不然往后接着排多了都不知道回复的谁,可以参照扣扣空间的回复。。。 
    • 阿和 博主 (2012-11-29 07:31:35)
      结合个人情况,我觉得没这个必要了,基本上一个回复里都是一个对话,换个话题时可以另开个主回复。 
    • Lvtu 才高八斗 (2012-11-29 10:00:21)
      假如另外来一个人对现在评论中你的第一条讨论进行回复呢? 
    • 阿和 博主 (2012-11-29 10:04:05)
      呵呵,没有那么复杂的。况且就算用@,@的也是人,一个回复中同个人发了好几条,谁知道@的是哪一条?