最近又拜读了飞鸟的WWWBOARD 4大作,又有飞鸟的一些解释,比BOARD3好读多了,确实是个设计的挺优秀的PRG。我根据我的实际需要,写了一个简装版和一个全部版(内核可全是飞鸟的BOARD4),暂时还没UPLOAD,只是去掉了一些 If pwssys...,If winnt_chinese等。后来觉得飞鸟的程序有的地方可以改一下,现写出来,另加上一些BOARD4的我的心得,供喜欢BOARD4的朋友参考。不知对不对,请飞鸟指正。
飞鸟的BOARD主要在数据库结构,结构的说明飞鸟已经讲了,我不在叙述。
List.asp语句:
1、先取出根帖(字段Parentid=0),并将得到的记录集反序排列
Select announceid,boardid from announce Where boardid="&boardid&" and parentid=0 ORDER BY announceid DESC
2、利用Getrows从记录集中选出20条根帖,存入到rootid数组中。
3、选出rootid数组中的Announceid,形成如同(1,2,3,4,5,.....20)的格式,
(飞鸟:有个判断语句:If Ubound(rootid)>1好象不要也可以吧)
4、因为每一组讨论的话题(根帖-父帖-子帖)它们都拥有一个相同的Rootid,Rootid之间的关系:
子帖(rootid)=父帖(rootid)=根帖的(rootid)=根帖的(announcdid),(这个在存储子帖时注意一下)明白这点很重要,所以飞鸟用:
select AnnounceID,parentID,child,boardID,userID,UserName,UserEmail,URL,URLTitle,URLPic,Topic,DateAndTime,hits,length,RootID,layer,orders from Announcewhere BoardID="&cstr(boardID)&" and ( rootID in "&selStr& " ) ORDER BY rootID desc,orders "
将这20条根帖及其所有子帖一股脑儿的全带了出来,相同的Rootid靠Orders升序排序,
5、记住layer只是控制层的, eg:我给你写了一个回复帖,那么我就是你的子帖->layer+1,但还要把最新加入的帖子放在最上面显示,这就靠orders了,因为orders采用的是升序排列,那么就提取出父帖的rootid,orders 将同一组(rootid)且orders>父帖的orders的Orders值加+1,就可以实现了,只不过写的时候倒过写:
conn.execute "update announce set orders=orders+1 where rootid="&cstr(RootID)&" and orders>"&cstr(iOrders)
Orders=Orders+1
6、关于控制缩进的layer,那就用数值套进去算吧,马上就明白了。
7、飞鸟tree.inc有些变量没用上,删除吧!
8、飞鸟判断一个用户是否新用户,用了循环。我用:
dim newuser,rs,SQL
newuser=false
Set rs=Server.CreateObject("ADODB.Recordset")
SQL="Select * from user Where Ucase(username)='"&Ucase(username)&"'"
rs.open SQL,connmdb,1,3
If rs.eof then
rs.addnew
newuser=true
rs("username")=username
rs("userpassword")=userpassword
rs.update
If err then
founderr=true
message="对不起,操作数据库失败,请稍侯再试"
showmessage(message)
Else
userid=rs("userid")
End If
Else
If rs("userpassword")<>userpassword then
founderr=true
message="您的密码不正确(可能该名字被他人占用了,请尝试用别的名字)"
showmessage(message)
Else
userid=rs("userid")
End IF
End If
9、对了飞鸟,Announce表中,"Userid"字段好象起不到作用,是不是可以CUT掉,因为表中已经有了"username","useremail"字段。
xixi,罗嗦了一通 ^O^
……