最近一段時間研究了一下bbs方面的一些程序,也拜讀了本站bbs的源程序,自己覺得受益匪淺, 很多程序都堪稱典范。在主要的論壇貼子處理方面,很多的論壇也都模仿此作。因為我不想總拿別 人的東西照抄,所以自己用了另一種處理方法來做的。至于方法如何還請大家評斷。(我當然覺得 自己的好了 8-)) 1。貼子的排序 數據庫 Id,SortId,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content 1 999999 ......................................... 2 999998 ......................................... 3 999997 ......................................... id為自動編號,也即顯示的貼子號 引入一個SortId,50位字符型, 設根貼子為六位(如999999,你也可以更多,我想已經夠了) 設第一貼為999999 第二貼為999998 第三貼為999997 ............. (注意這都是根貼,是六位長)
為什么第一貼為999999,是為了以后便于輸出貼子。 要在999999下面回復一貼即第二層貼子就在數據庫中寫入 Id,SortId,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content 4 999999z ......................................... 在999999后面加了一個“z” (增加一位可以用來區分貼子所在層數) 要在999999下面再回復一貼也即第二層的貼子就在數據庫中寫入 Id,SortId,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content 5 999999y ......................................... 要在發貼,依此類推 Id,SortId,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content 6 999999x ......................................... 要在第二層貼子下面再回復貼子 如貼子999999z下 即第三層貼子就在數據庫中寫入 Id,SortId,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content 7 999999zz .........................................
再回復999999z貼子就在數據庫中寫入 Id,SortId,Title,Uname,Stime,BackTimes,ReadTimes,Face,Content 8 999999zy .........................................
現在的貼子情況即為: 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 .........................................
我向大家也看出了我的思路至于輸出的時候使用 sql = "select * from [plan] where boardid="+ strboardid+" ORDER BY SortId "; rs = conn.executeQuery(sql);
根據SortId排序后的結果: 1 999997 ......................................... 2 999998 ......................................... 3 999999 ......................................... 4 999999x ......................................... 5 999999y ......................................... 6 999999z ......................................... 7 999999zy ......................................... 8 999999zz .........................................
現在大家應該明白為什么前六位貼子號和字母是遞減的了.(當然也能是遞增的)
2.貼子的顯示輸出,主要是處理<UL></UL>.程序如下 /* 取得數據集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())//用來計算上貼到本貼需要輸出多少個</UL> while(length>SortId.length()) { length--; out.println("</UL>"); }
//舉例 從3到4 //<ul>1 .......................SortId=6 //<ul>2 .......................SortId=7 //<ul>3.......................SortId=8 //</ul>//此標記是由if(BackTimes.equals("0"))out.println("</UL>");輸出的 //</ul> //</ul>//此標記和上一個</UL>是由if(length>SortId.length())......這一部分生成的 //<ul>4........................SortId=6</ul> // //if (8>6)//條件成立進入循環 //while(8>6)//開始循環輸出兩個</UL>
out.println("<UL>");//因為任何一貼前都有<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>");//因為任何回復次數為0的貼子后都有</UL> length=SortId.length();//記錄貼子SortId的長度,用來與下一貼比較
}//循環結束 while((length-6)!=0)//因為最后一條記錄不能再與下一條比較,所以要補齊最后的</UL> { length--; out.println("</UL>"); } out.println("</UL>"); } catch(SQLException ex) {out.println(ex.getMessage());} 3。發貼子 發根貼按SortId升序排序取第一條減一為新貼子的SortId(要轉整數) 回復貼子根據回復次數0時為z,1時為y,.......加到你所要回復的貼子的SortId后。增加回復次數。
大體上這就是我的做法,上面的例子僅僅為了說明輸出,所以沒有涉及其他問題。如分頁,刪貼子,中文問題等。可能 其中會有問題,還請大家發表意見,給予我提示。wflm@263.net
|