利用ASP打造網站論壇DIY(二)

來源:互聯網
上載者:User
  2、構建文章顯示模組

  前面說過,一片具體的文章是分屬在看板和主體之下的。因此顯示文章也要經過看板列表和主體列表這兩頁面後,才能得到特定主題下文章的列表。

  (1)板列表的顯示頁面:


< html>
< head>
< title>看板列表< /title>
< meta http-equiv="Content-Type"content="text/html; charset=GB2312">
< /head>

  (2)開啟串連,顯示看板列表


< %Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "select * from 看板列表"
set rs=conn.execute(sql)
%>

  註:簡單的SQL查詢,把所有的看板有關訊息傳回到紀錄集RS中。下面的任務就是顯示紀錄記得內容,並在相應的看板名稱上建立顯示看板主題的串連。


< body bgcolor="#FFFFFF">
< h2 align="center">看板列表</h2>
< table width="60%" border="0"cellspacing="0" cellpadding="0"align="center">
< tr bgcolor="#FFFFCC">
< td height="35" width="25%">看板名稱</td>
< td height="35" width="21%">板主</td>
< td height="35" width="23%">主題數</td>
< td height="35" width="31%">板主登陸</td>
< /tr>

  註:這兒一部分是顯示出表格中每一列的標題,這兒我沒有用一個統一的函數來顯示RS紀錄記的內容,因為這樣可以對錶格的外觀和風格做更多的控制,使用起來雖然有點麻煩,但是卻更為靈活。


< %
do
boardid=rs("id")
boardname=rs("名稱")
boardmanager=rs("板主")
response.write "< tr>< td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"

  註:這一行是重點,當點擊了各個板的名稱後,可以串連到顯示看板主題的頁面。程式碼看起來有點麻煩,我分解了給你講,你就會明白了。在點擊之後,瀏覽器請求使用的是qBoard.asp頁面,並帶有一個參數boardid,代表要顯示看板的ID號,在請求頁面和參數之間用問號(?)分隔。Boardid是前面設定了的變數,其中包含的就是對應看板的ID號。這個串連中還帶有另外一個參數boardname,用來把看板名稱傳遞給qBoard.asp頁面。在多個參數間使用"&"來分隔。這個參數不是必須的,傳遞過去是為了免得在qBorad.asp中再次用boardid來查詢看板名稱。一般來說,能夠少用資料庫操作就應當盡量的少用,這樣可以提高ASP頁面的效能。因為Response.Write語句使用字串作為參數的,所以上面的字串和變數之間使用的是"&"連接符。最後ASP頁面解釋的結果應該是像這樣的


<td>< a href=qBoard.asp?boardid=1&boardname=系統板>系統板 < /a>< td>。
response.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"
response.write "< td>" &rs("主題數") & "< /td>"
response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">板務處理< /a></td>< /tr>" 

  註:在這個表中,除了可以由串連來顯示看板主題的內容,還有一個斑竹查詢部分和板務處理部分,版主查詢可以是通過qAuthor.asp來實現的,它只是簡單的從資料庫中取出作者訊息,並顯示出來,這兒就不多說了。而板務處理是由managerlogin.asp頁面來處理的。這屬於文章審閱模組,我在後面再詳說。


rs.movenext
loop until rs.eof
%>

  註:通過一個do … loop迴圈,把紀錄集中所有的訊息都顯示了出來。


< /table>
< div align="center"><br>

  點擊看板名稱可以得到主題列表,點擊板主名稱可以察看板主訊息


< /div>
< /body>
< /html>
< %
set rs=nothing
conn.close
set conn=nothing
%>

  (3)打造qBaord.asp頁面:  


< %
boardid=request("boardid") '取出由上個頁面傳遞過來的看板ID號
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "主題列表"
ReDim param(0) //註:聲明參數數組
param(0) = CLng(boardid)//註:CLng 不可忽略
Set rs = cmd.Execute( ,param )
%>
< html>
< head>
< title>主題列表< /title>
< meta http-equiv="Content-Type"content="text/html; charset=GB2312">
< /head>
< body bgcolor="#FFFFFF">
< h1 align="center"><%=rs("看板名")%>板主題列表 </h1>
< table width="80%" border="0"cellspacing="0" cellpadding="0"align="center">
< tr bgcolor="#FFFFCC">
< td width="89%" height="21">主題</td>
< td width="11%" height="21">文章數</td>
< /tr>
< %
do
topicid=rs("id")
topicname=rs("標題")
sum=rs("文章數")
response.write "< tr>< td><a href=qtopic.asp?topicid=" & topicid& "&boardname=" & boardname& ">" & topicname &"< /a>< /td>"
response.write "< td>" &sum & "< /td>< /tr>"
rs.movenext
loop until rs.eof
%>
< /table>
< /body>
< /html>
 

  註:qBoard.asp列出了某個版面下的所有的主題,在點擊了主題名稱後就會進入相應的主題文章列表。這個列表的是由qTopic.asp這個ASP指令碼來實現的。Qtopic.asp的程式碼在本質上幾乎和qBoard.asp沒有區別,只是在各自的細節上有所區別,這兒也不打算再多講了。

  (4)在點擊了文章列表中的文章標題後,會進入文章內容瀏覽頁article.asp:


< %
articleid=request("articleid")
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = conn
cmd.CommandText = "按id查詢文章"
ReDim param(0) ' 聲明
param(0) = CLng(articleid) ' Cint 不可忽略
Set rs = cmd.Execute( ,param )
author=rs("作者id")
title=rs("標題")
data=rs("日期")
rate=rs("推薦度")
boardid=rs("看板id")
topicid=rs("主題id")
boardname=rs("看板名")
topicname=rs("主題名")
content=rs("內容")
content=replace(content,vbCrlf,"</p>< p>")
content="< p>" & content& "< /p>"

  註:這是一個要注意的地方,在內容欄位中包含的是備忘類型的文本,其中可以包含換行字元。在HTML的顯示中,必須要把換行字元(也就是vbCrlf常數)換成HTML的段落符號。這樣在段落與段落的銜接處,就不會打亂原來輸入時的格式。如果要設計的更好些,可以通過CSS來複位義< P>標籤,設定其test-indent屬性,就可以實現每段開頭空格了。

  (5)把點擊次數加一


sql="Update 內容表 Set 點擊次數=點擊次數+1Where ID=" & articleid
conn.execute sql

  註:這兒有一個SQL語句,沒當頁面被顯示的時候,會把相應的表中點擊次數欄位加一,這樣就能夠對文章瀏覽的次數做出統計,並可按順序排名。在執行條語句的時候,我發現:本來在SQL語句中,嵌入的變數名應該加上單引號以與區別,但在這兒的articleid變數上我並沒有加單引號,居然也能夠通過,而我以前這樣寫從來都是會引發錯誤的,不知是不是由於新版本的ADO的緣故。


set cmd=nothing
%>
< html>
< head>
< title>Untitled Document< /title>
< meta http-equiv="Content-Type"content="text/html; charset=GB2312">
< /head>
< body bgcolor="#E9E9E4">
< table width="89%" border="0"cellspacing="0" cellpadding="0"align="center">
< tr bgcolor="#CCCCCC">
< td>作者:< font color="#FF3366"><a href="qauthor.asp?author=< %=author%>">< %=author%> < /a>< /font>發表日期:< font color="#FF3333"><%=data%>< /font>
看板:< font color="#FF3333"><a href="qboard.asp?boardid=< %=boardid%>">< %=boardname%>< /a>< /font>板主推薦:< font color="#FF3333">#rate#</font>< /td>
< /tr>
< tr bgcolor="#CCCCCC">
< td>標題:< font color="#FF3333"><%=title%>
主題:< a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
< /tr>
< tr valign="top">
< td>
< hr>
< font color="#FF3366">文章內容:< /font>< br>
< br>
< font color=blue>< %response.writecontent%>< /font>
< br>
< br>
< /td>
< /tr>
< tr valign="top">
< td height="18">
< table width="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
< tr>
< td width="0%"> < /td>
<td width="65%">關於此話題<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">發表評論< /a></td>

  這個串連允許網友對此評論的話題發表自己的見解,這是下一個模組要講的內容了,這兒且按下不表。


< /tr>
< /table>
< /td>
< /tr>
< /table>
< /body>
< /html>
< %
set rs=nothing
conn.close
set conn=nothing
%>

  到此,文章顯示部分也完成了。下面再來看看文章發表部分是如何?的。

 



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。