单层嵌套回复代码
分类:电脑知识 发表于: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,是为了把评论内容和所评论的文章信息挂钩起来。
★终于完工了,写的应该还挺详细的吧。