樓主

西風

發送站內信
|
像這樣
捻花惹草
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 在貼文表單,秀出一個亂數,讓貼文者輸入,並作驗證,以避免貼文板被大量灌水,很實用
待續........
|