Posted: 2005/1月/07 10:52上午 | IP記錄
|
|
|
內容連接組件實例應用
這部分是創建一個簡單的討論組的實例應用,用戶在這裡可以讀取他人文章以及發表新的文章。
注意
對於這些很有代表性的實例,如果用戶希望在線進行使用和測試以加深理解,建議訪問http://www.aspsite.com
下面是一個特別簡單的用戶討論組的範例,如果你希望也有這麼一個討論組,那麼所有的程序放到你的服務器上就可以了(當然前提是你 的服務器支持Active Server Pages)
創建這麼一個討論組,你只需要以下四個文件:
■發佈文章頁:這個頁面用來發佈文章
■文件包含頁:用於用戶讀取文章,將發佈的文章文件包容在該文件中。
■新項目處理頁:將發佈的文章進行保存並且更新組件連接所用的文本文件。
■討論組主頁:顯示所有信息,提供發佈文章的入口。
發佈文章頁
提供用戶發佈新消息的頁面,這其實只是一個普通的HTML頁,利用了HTML的Form進行文章填寫,其中名字為subject 的文本框是標題攔。
例20.1 post.cfm腳本
<HTML>
<HEAD><TITLE>文章發佈頁</TITLE></HEAD>
<BODY>
<h2>發佈一個新消息</h2>
<form method=post action=」newitem.asp」>
主題:<input type=text name=subject size=50 maxlength=50>
<br>
<textarea name=Posting cols=60 rows=10wrap=」Virtual」></textarea>
<p>
<input type=Reset value=」清除」>
<input type=Submit Value=」發佈信息」>
</Form>
</Body>
</Html>
文件包容頁
每一個信息頁顯示時都應當包括前一篇和後一篇,同時還要有一個回主頁的連接,這樣信息頁就必須用文件包容方式,這些連接顯示顯然 是自動更新的,那麼更新過程在下一個頁面介紹中,這個頁面介紹是如何動態顯示。腳本如下:
例20.2:news.inc腳本
<hr>
<%
Set mylinks=Server.CreateObject(「MSWC.NextLink」)
IF mylinks.GetListIndex(「news.txt」)>1 THEN
%>
<a Href=」<%=mylinks.GetPreviousURL(「news.txt」) %>」>
前一篇文章</a>
<% End IF %>
<a Href=」<%=mylinks.GetNextURL(「news.txt」) %>」>
後一篇文章</a>
<p>
<a href=」news.asp」>返回主頁</a>
顯示結果應當無須贅述,有興趣的讀者可以自行瀏覽http://www.aspsite.com
新項目處理頁
當用戶發表完一個新消息後,就進入了新項目處理頁,這個頁面看上去很簡單,但是處理工作最為複雜。
這個頁面動態生成新的Active Server Pages文件,(天那,你知道這意味著什麼?!) 當用戶發表了新的消息,那麼這個消息就存在一個文本文件中,不過,這裡面的文本文件不是一般意義的純文本,而是Active Server Pages文件。這個新的項目的依據的信息就是從HTML的FORM中接受到的。
同時該asp文件也將內容連接組件所依據的文本文件進行更新,主要是為新的消息創建一個對應的記錄。因此達到動態的即時更新的效 果。
下面的例子腳本明顯比以前的長,當然,對於專業製作人士,這其實算不上什麼。不過現在作為教程,我們會對每一部分詳細解釋。
例20.3新項目處理頁
<%
『創建這個發表內容
TheSubj=Server.cfmLEncode(「Request.Form(「subject」))
If TheSubj =」」 THEN TheSubj=」無標題」
ThePost=」<HTML><HEAD><TITLE>」&TheSubj& amp;」</TITLE></HEAD><BODY>」
ThePost=ThePost&」發表日期:」&NOW&」<Hr>」
ThePost=ThePost&Server.cfmLEncode(「Request.Form(「Posting 」))
ThePost=ThePost&」<!-- #INCLUDE VIRTUAL=」」new.inc」」 -->」
ThePost=ThePost&」</BODY></HTML>」
『創建一個新的文件名(不重名)
Set mylinks=Server.CreateObject(「MSWC.NextLink」)
TheName=」item」&mylinks.GetlistCount(「news.txt」)+1&」. asp」
TheNamePath=Server.Mypath(TheName)
『保存該發表內容到文件中
Set MyFileObj=Server.CreateObject(「Scripting.FileSystemObject」)
Set MyOutStream=MyFileObj.CreatTextFile(TheNamePath)
MyOutStream.Write ThePost
MyOutStream.Close
『對內容連接組件所需文本文件的更新
TheNews=Server.MyPath(」news.txt」)
Set MyNews=MyFileObj.OpenTextFile(TheNews,8,TRUE)
MyNews.WriteLine TheName&vbTab&TheSubj
MyNews.Close
%>
<HTML>
<HEAD><TITLE>新的項目</TITLE></HEAD>
<BODY>
<h2>謝謝發表文章</h2>
<a href=」news.asp」>返回主頁</a>
</Body>
</HTML>
在本頁中,創建了一個叫做ThePost的變量用來記載這個Active Server Page的內容, 在這裡面,整個Active Server Page作為一個很長的字符串來處理,下面仔細看一下 這個字符串的生成過程:
『創建這個發表內容
TheSubj=Server.cfmLEncode(「Request.Form(「subject」))
If TheSubj =」」 THEN TheSubj=」無標題」
ThePost=」<HTML><HEAD><TITLE>」&TheSubj& amp;」</TITLE></HEAD><BODY>」
ThePost=ThePost&」發表日期:」&NOW&」<Hr>」
ThePost=ThePost&Server.cfmLEncode(「Request.Form(「Posting 」))
ThePost=ThePost&」<!-- #INCLUDE VIRTUAL=」」new.inc」」 -->」
ThePost=ThePost&」</BODY></HTML>」
這個Active Server Page文件不僅包括了Form中傳遞過來的信息,還包括了日期信息 以及News.inc的一段用於動態顯示的腳本。
注意
對於引號在字符串中的賦值是採用連著兩遍的引號輸入來進行的,即,在字串賦值中兩個連著的引號相當於一個引號。例如,將MySt ring賦值為下面這個字段
我說:」你好」
那麼賦值語句為MyString=」我說:」」你好」」」
不過,對於中文輸入法的雙字節引號,不需要這樣處理。
腳本的下一部分是給這個active Server Page起一個不重複的名字,你當然不希望新 的消息覆蓋以前的,因此在存儲該文件之前必須首先進行不重複的文件名的生成:再看這段腳本:
『創建一個新的文件名(不重名)
Set mylinks=Server.CreateObject(「MSWC.NextLink」)
TheName=」item」&mylinks.GetlistCount(「news.txt」)+1&」. asp」
TheNamePath=Server.Mypath(TheName)
由於使用了內容連接組件的Count屬性,就可以通過從文本文件中的記錄數目來命名以保證不會有重複了,這裡文件名分別為ite m1.asp,item2.asp,item3.asp等等,每一個信息對應一個不同的名稱,不過,提醒注意的是,如果從new s.txt中刪除了一些信息,那麼文件命名重複的現象就會發生,因為這只是簡單示例,所以沒有做這些考慮處理。
第三部分腳本是將將生成的ThsPost字符串以生成的TheNamePath路徑名存入硬盤,這裡面顯然用到了FileSys temObject()方法來進行處理,那麼詳細的這種處理的介紹參見上一章。腳本如下:
『保存該發表內容到文件中
Set MyFileObj=Server.CreateObject(「Scripting.FileSystemObject」)
Set MyOutStream=MyFileObj.CreatTextFile(TheNamePath)
MyOutStream.Write ThePost
MyOutStream.Close
最後部分是更新News.txt文件,該文件被內容連接組件用來檢索信息,下面是這個更新部分的腳本:
『對內容連接組件所需文本文件的更新
TheNews=Server.MyPath(」news.txt」)
Set MyNews=MyFileObj.OpenTextFile(TheNews,8,TRUE)
MyNews.WriteLine TheName&vbTab&TheSubj
MyNews.Close
%>
如果該news.txt不存在,那麼系統會自動創建這個文件,因此當討論組中發表了第一個文件,系統就會創建這個news.tx t。
請注意這裡面用到了VBScript的vbtab常量,這個常量就是tab鍵的作用,那麼該news.txt必須用tab鍵進行 URL地址和描述的分隔是上一章中介紹過的。
討論組主頁
最後當然要創建討論組的主頁,這個頁面就是顯示各個信息的標題並提供連接,以及提供發表新文章的入口連接,下面是這個頁面的全部 腳本:
例子:20.4討論組主頁
<%
『創建內容連接組件
Set mylinks=Server.CreateObject(「MSWC.NextLink」)
%>
<HTML>
<HEAD><TITLE>討論組主頁</TITLE></HEAD>
<BODY>
發佈信息數:<%=Mylinks.GetListCount(「news.txt」) %>
<hr>
[<a href=」post.cfm」> 發佈新文章</a>]
<UL>
<%
『顯示信息列表
For i=1 to mylinks.GetListCount(「news.txt」)
%>
<LI>
<a href=」<%=mylinks.GetNthURL(「news.txt」,i)%>」>
<%=mylinks.GetNthDescription(「news.txt」,i)%></a>
<%
next
%>
</ul>
</body>
</html>
很容易理解,這個頁面就是首先創建一個內容連接組件的事例,然後根據news.txt去判斷連接文件的數目並顯示,連接post .cfm沒什麼可以解釋的,然後根據連接文件的數目進行For …Next循環,將其描述顯示出來並且連接相應URL地址。
那麼這麼一個例子對於創建討論組很具有代表性,讀者甚至可以直接利用這裡面提供的腳本來製作自己的討論組,當然,這個討論組主要 是教學性質,過於簡化,下面部分討論怎樣擴展其功能。
討論組示例功能拓展
這個簡單的討論組顯然只能應用於小規模的範圍,幾個知交好友建立聯繫網站,互通聲息還可以,一旦文章增加,很多問題解決不了,比 如說,有人同時進行文章發佈嘗試,這個內容連接組件就沒有考慮這種問題。利用諸如SQL Server這樣的數據 庫來創建討論組就可以大大增強其功能應用,當然,這需要ActiveX Data對象,( 本書第22章將進行詳細介紹),和內容連接組件不同的是,數據庫進行大量信息的存儲和讀取將更加有效。
不過,這個內容連接組件的示例還是可以使你瞭解怎樣對一定數量的文件連接進行有效的處理,這個組件所完成的動態頁面更新是一個優 秀的的站點負責人應當學會的。
|