台灣最大程式設計社群網站
線上人數
962
 
會員總數:245214
討論主題:189087
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> 樹狀回覆式討論板
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
樹狀回覆式討論板
價值 : 0 QP  點閱數:691 回應數:0

樓主

西風
中級專家
4491 12
2044 592
發送站內信

像這樣

捻花惹草

1.
樹狀結構大致上是利用[遞回呼叫]來作...

2.
每個話題都能有一張圖,顯示在話題的最上頭,按圖可秀出大圖...
新增一張擺放圖形的資料表,寫入資料時,寫入圖檔資料後,將索引值寫入另一張表單的其中一個欄位..
這樣就可以用IMG SRC=http://網址及路徑/ShowImage.asp?id=xxx來顯示

3.
有分頁(選擇每頁瀏覽話題數及顯示上十頁下十頁等),搜索(分作者標題內文作搜索),管理功能
管理功能要刪掉話題比較好辦,可以輕易刪掉底下的全部回覆,若是刪掉其中一篇回覆,樹枝斷了一根要接起來就很麻煩了

4.
郵寄分享(作者貼文時可以選擇分享與否)
rs("mail")預設值為0,若選擇不分享則更改為-1,被寄一次加1......
若郵寄話題,可將圖檔插入cid: contentId裡(aspemail和jmail元件都支援)

一.先設計一張表單的欄位

TopNo_長整數,可重覆,從90001開始,同一話題的值(話題或回應)都一樣
RecordNo_記錄編號,數字,不可重覆,每筆貼文都有一個不同的記錄編號
ParentNo_數字,預設值為0,話題為0,回應則寫入所回應話題的RecordNo值
ReplySum_數字,預設值為0,值代表這個話題或回應底下有多少回應
ReplyNo_數字,預設值為0,值代表它是上層話題的第幾個回應
Hits_瀏覽次數
RmYn_數字,預設值為0,1時有人回應將發出一封Email給貼文者
Mail_數字,預設值為0,-1時不能寄出貼文,每寄出一次+1
Title_標題,字串,限定30字_Trim(Left(Request("Title"),30),限制不可使用HTML語法
Cmail_貼文者的email
AuthorIp_貼文者的IP
DateTime_貼文時間,預設值Now()
Last_Reply_回應時間,預設值Now()
Message_貼文內容,限制HTML,增加預設的HTML功能,諸如粗字,斜字,底線,文字顏色,秀超連結,秀網路絕對位址圖片,秀上傳的圖片等等...

二.顯示模式與分頁

通常我們都希望貼文板能夠依照不同的選擇來分頁顯示
資料表單有四個欄位,分別是_貼文時間(DateTime),最後回應(Last_Reply),回覆總數(ReplySum),話題人氣指數(Hits),適合讓瀏覽作選擇
每頁顯示幾則話題,也可由瀏覽作選擇..
這二個選擇值,可以用Session物件存下來,那麼在網頁的轉換之間,就可以不必有一堆的Request.ServerVariables字串
第一頁,上一頁,下一頁,最終頁,可以依不同的條件,不必要顯示就把BUTTON給disabled掉,再依照不同條件,是否顯示上十頁,下十頁等
分頁要用到

If Request("PageSize")=Empty Then
If Session("PageSize")<>Empty Then
PageSize=Session("PageSize")
Else
PageSize=20
End If
Else
PageSize=Cint(Request("PageSize"))
Session("PageSize")=PageSize
End If
'以上是為了給瀏覽者自設每頁顯示話題則數

If Request("Page")=Empty Then
Page=1
Else
Page=cint(Request("Page"))
End If
'如果沒有選則從第幾頁開始顯示,就預設為第一頁

RS.PageSize=PageSize
If Not rs.eof Then
RS.AbsolutePage = PAGE
End if


三遞迴呼叫


Do until rs.EOF or k>RS.PageSize
省略你要作的輸出工作
' 第一次呼叫副程式,來顯示階層...
Thread 1, RecordNo
Rs.MoveNext
k=k+1
response.write "
"
Loop

Sub Thread(intLevel, intMsgID)
 省略你要作的輸出工作 
Do While Not Rs2.EOF
省略你要作的輸出
Thread intLevel+1,Rs2("RecordNo") '再次呼叫,遞回...顯示資料
Rs2.MoveNext
Loop
Rs2.Close
End Sub


四.圖形資料表

最好建立一個hash欄位,以避免上傳圖檔一再重覆,Hash=File.MD5Hash

rs.Open "SELECT * from 圖形資料表單 WHERE Hash='" & Hash & "'", Connect, 2, 3
If Not rs.eof Then
ID=RS("ID") '上傳圖檔重覆,傳出一個ID索引值即可
rs.Close
..........
Else
沒相同的圖檔才寫入資料表中..... 
End If


五。搜尋

一般的貼文版,大概有三個個欄位可供搜尋,作者,標題,內文..
搜尋其實很簡單,就是那麼一行
sqlstr="select * from llove where (" & field & " like '%" & key & "%') order by RecordNo desc"
表單如下

<form action="search.asp" method="post">
<input type="hidden" name="page" value="1">
搜尋欄位
<select name="field">
<option value="author">作者
<option value="subject">標題
<option value="content">內文
</select>
搜尋值
<input type="text" name="key" size="20" maxlength="20">
<input type="submit" value="開始搜尋">
</form>


六。郵寄分享

常用的Mail元件,大概有三:CDOMail,ASPMail和JMail
先測試ASPMail,不知為啥,中文字就一直都會有亂碼,乾脆改成JMail(註:ASPMail的附夾檔案功能較強,其它無差,反正也用不著)
用到mail元件有二個部份
1.
檢查[Mail_數字]欄位,預設值為0,-1時不能寄出貼文(將button給disable),每寄出一次+1
2.
在回應寫入的時候,檢查[RmYn_數字],預設值為0,1時有人回應將發出一封Email給貼文者

email可以用fs.OpenTextFile開啟一個樣式檔sendmail.txt,再將樣式檔裡的字串[++欄位值++],取代為欄位值,以html格式寄出.....

七。Cookies與亂數產生器
前面提到利用Session物件,免掉網頁轉換間,一堆的Request.ServerVariables字串麻煩

那利用Cookies可以讓貼文者,也免掉固定的文字輸入,諸如作者,Mail欄位的輸入,以及避免輸入者因重整而連續開話題..
1.
ASP處理
Author=request("Author")
Cmail=request("Cmail")
Domain = Request.ServerVariables("SERVER_NAME")
Response.Cookies("Author") = Author
Response.Cookies("Author").Domain = Domain
Response.Cookies("Author").Expires = date()+30
輸入表單
<input name="Author" size="20" MAXLENGTH="20" value="<%=trim(Request.Cookies("Author"))%>">

2.
ASP處理
If request.form("checkreply")=request.cookies("checkreply") then
response.write "不可重覆發言"
response.end
Else
response.cookies("checkreply")=request.form("checkreply")
End If
輸入表單
<input type=hidden name="checkreply" value="<%=now%>">

亂數產生器
Function GeneratePassword()
For i = 0 To 1
Randomize
tempPassword = tempPassword & right(CStr((9 - 0 + 1) * Rnd + 0),3)
Next
GeneratePassword = tempPassword
End Function
在貼文表單,秀出一個亂數,讓貼文者輸入,並作驗證,以避免貼文板被大量灌水,很實用

待續........
搜尋相關Tags的文章: [ 樹狀階層 ] , [ 討論板 ] , [ 分頁 ] , [ 搜索 ] , [ 管理 ] , [ 郵寄 ] ,
本篇文章發表於2008-01-01 00:55
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.