?? 另一種bbs設(shè)計(jì)的思路,請(qǐng)各位高手給予評(píng)價(jià)。.txt
字號(hào):
作者:wflm
日期:2000-12-21 22:32:18
最近一段時(shí)間研究了一下bbs方面的一些程序,也拜讀了本站bbs的源程序,自己覺(jué)得受益匪淺,
很多程序都堪稱典范。在主要的論壇貼子處理方面,很多的論壇也都模仿此作。因?yàn)槲也幌肟偰脛e
人的東西照抄,所以自己用了另一種處理方法來(lái)做的。至于方法如何還請(qǐng)大家評(píng)斷。(我當(dāng)然覺(jué)得
自己的好了 8-))
1。貼子的排序
數(shù)據(jù)庫(kù) Id,SortId ,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content
1 999999 .........................................
2 999998 .........................................
3 999997 .........................................
id為自動(dòng)編號(hào),也即顯示的貼子號(hào)
引入一個(gè)SortId,50位字符型,
設(shè)根貼子為六位(如999999,你也可以更多,我想已經(jīng)夠了)
設(shè)第一貼為999999 第二貼為999998 第三貼為999997 .............
(注意這都是根貼,是六位長(zhǎng))
為什么第一貼為999999,是為了以后便于輸出貼子。
要在999999下面回復(fù)一貼即第二層貼子就在數(shù)據(jù)庫(kù)中寫入
Id,SortId ,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content
4 999999z .........................................
在999999后面加了一個(gè)“z” (增加一位可以用來(lái)區(qū)分貼子所在層數(shù))
要在999999下面再回復(fù)一貼也即第二層的貼子就在數(shù)據(jù)庫(kù)中寫入
Id,SortId ,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content
5 999999y .........................................
要在發(fā)貼,依此類推
Id,SortId ,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content
6 999999x .........................................
要在第二層貼子下面再回復(fù)貼子 如貼子999999z下 即第三層貼子就在數(shù)據(jù)庫(kù)中寫入
Id,SortId ,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content
7 999999zz .........................................
再回復(fù)999999z貼子就在數(shù)據(jù)庫(kù)中寫入
Id,SortId ,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content
8 999999zy .........................................
現(xiàn)在的貼子情況即為:
Id,SortId ,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content
1 999999 .........................................
2 999998 .........................................
3 999997 .........................................
4 999999z .........................................
5 999999y .........................................
6 999999x .........................................
7 999999zz .........................................
8 999999zy .........................................
我向大家也看出了我的思路至于輸出的時(shí)候使用
sql = "select * from [plan] where boardid="+ strboardid+" ORDER BY SortId ";
rs = conn.executeQuery(sql);
根據(jù)SortId排序后的結(jié)果:
1 999997 .........................................
2 999998 .........................................
3 999999 .........................................
4 999999x .........................................
5 999999y .........................................
6 999999z .........................................
7 999999zy .........................................
8 999999zz .........................................
現(xiàn)在大家應(yīng)該明白為什么前六位貼子號(hào)和字母是遞減的了.(當(dāng)然也能是遞增的)
2.貼子的顯示輸出,主要是處理<UL></UL>.程序如下
/*
取得數(shù)據(jù)集rs
*/
String Id,SortId,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content;
int length=6,ContentLength;//初始化第一貼為根貼
boolean isnew=false;
out.println("<UL>");
while (rs.next()) {
Id=rs.getString("Id");
SortId=rs.getString("SortId");
Title=china.asHTML(rs.getString("Title"));
Uname=china.asHTML(rs.getString("Uname"));
Stime=china.asHTML(rs.getString("Stime").substring(0,19));
//if (System.currentTimeMillis() - rs.getDate("Stime").getTime()< 86400000){isnew =true;} else {isnew =false;}
BackTimes=rs.getString("BackTimes");
ReadTimes=rs.getString("ReadTimes");
Face=rs.getString("Face");
ContentLength = rs.getString("Content").length();
String dot = ",";
String yh = "\"";
//控制部分
if(length>SortId.length())//用來(lái)計(jì)算上貼到本貼需要輸出多少個(gè)</UL>
while(length>SortId.length())
{ length--;
out.println("</UL>");
}
//舉例 從3到4
//<ul>1 .......................SortId=6
// <ul>2 .......................SortId=7
// <ul>3.......................SortId=8
// </ul>//此標(biāo)記是由if(BackTimes.equals("0"))out.println("</UL>");輸出的
// </ul>
//</ul>//此標(biāo)記和上一個(gè)</UL>是由if(length>SortId.length())......這一部分生成的
//<ul>4........................SortId=6</ul>
//
//if (8>6)//條件成立進(jìn)入循環(huán)
//while(8>6)//開始循環(huán)輸出兩個(gè)</UL>
out.println("<UL>");//因?yàn)槿魏我毁N前都有<UL>
out.println(china.turnGb("<SCRIPT>o("+yh+Title+yh+dot+yh+Uname+yh+dot+yh+Stime+yh+dot+Id+dot+ContentLength+dot+BackTimes+dot+ReadTimes+dot+isnew+dot+Face+");</SCRIPT>"));
if(BackTimes.equals("0"))out.println("</UL>");//因?yàn)槿魏位貜?fù)次數(shù)為0的貼子后都有</UL>
length=SortId.length();//記錄貼子SortId的長(zhǎng)度,用來(lái)與下一貼比較
}//循環(huán)結(jié)束
while((length-6)!=0)//因?yàn)樽詈笠粭l記錄不能再與下一條比較,所以要補(bǔ)齊最后的</UL>
{ length--;
out.println("</UL>");
}
out.println("</UL>");
}
catch(SQLException ex) {out.println(ex.getMessage());}
3。發(fā)貼子
發(fā)根貼按SortId升序排序取第一條減一為新貼子的SortId(要轉(zhuǎn)整數(shù))
回復(fù)貼子根據(jù)回復(fù)次數(shù)0時(shí)為z,1時(shí)為y,.......加到你所要回復(fù)的貼子的SortId后。增加回復(fù)次數(shù)。
大體上這就是我的做法,上面的例子僅僅為了說(shuō)明輸出,所以沒(méi)有涉及其他問(wèn)題。如分頁(yè),刪貼子,中文問(wèn)題等。可能
其中會(huì)有問(wèn)題,還請(qǐng)大家發(fā)表意見(jiàn),給予我提示。wflm@263.net
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -