动态包括文本文件
Server
Side Includes (SSI,服务器旁包括)是创建你的网页有效的方法。一个SSI实际上是一个文件,它包含了HTML和ASP代码或者其它你想包括其它文件的代码。通过使用#include语句你可以更有效地编写你的代码(以及更少的错误),因为你是使用了“写一次,可以重复使用”的原则。既然SSI包括了其它的ASP代码,你可以划分你的网页,可以写一段代码使用在不用的网页上,而维护这段代码是在一处进行。是不是很酷!
我不想在本教程中详细介绍SSI,因为我觉得它很简单,你可以很快创建一个动态的SSI文件。在ASP代码被解释之前所有的SSI将被执行。所以如果SSI独立于ASP代码,那就将不会执行SSI了。在UltraDev中,你可以从插入菜单(Insert
Menu)中真正地选择SSI并且将它绑定到一个数据库记录数值,但是它并没有做任何事情。你所得到的是
好吧言归正转,到底怎样动态地将文本文件放置于你的网页上呢?这个问题包括一些技巧,可以使用FileSystemObject。这个FileSystemObject是一个基于Windows的组件,它允许你在你的网页服务器(Web
Server)上访问文件系统。
文章数据库
在本例子中,我想建立一个网站可以让用户张贴文章。我决定不想存储所有的文章在数据库中,因为把一个版本存如数据库比上载一个新的文件更烦恼。以下基本的表格设计:
区域名字 数据类型 描述
ArticleID Autonumber 主键
Title varchar(75) 文章标题
ShortDesc varchar(255) 简短的描述
ArticleURL varchar(50) 文章第一页的文件名字
Page2URL varchar(50) 文章第二页的文件名字(如果文章很长)
Page3URL varchar(50) 文章第三页的文件名字(如果文章很长)
Page4URL varchar(50) 文章第四页的文件名字(如果文章很长)
示例数据
区域名字 示例
ArticleID 100
Title 文章标题
ShortDesc 文章的简短描述
ArticleURL 100.asp
Page2URL 100-2.asp
Page3URL 100-3.asp
Page4URL 100-3.asp
网站
就象其它许多数据库驱动站点,Search(搜索)页面用户可以用它来搜索文章。Search页面重定向到List页面上。这个List页面可以显示文章数量、标题以及作者。通过点击文章连接Go to Detail server
behavior,用户就进入了ArticleInc.asp页面。现在让我们仔细看看这个页面。
在这个页面上第一件事情要做的是放置一个记录集,用于显示文章和作者。在所有的UltraDev记录集代码下面以及在标签上面增加以下的代码:
' The script below needs the file enclosed in quotes, adding
Chr(34) includes quotes around the filename
' This script has to come after the UltraDev 'Go to Specific Record' code so
that the correct ArticleURL is pulled up
接着你还要定义两个变量:ArticleLink ArticleFile
动态包括文本文件(2)——动态导航
在教程5中我已经介绍了怎样动态地合并文本文件到你地网页上。现在我们将继续深入探讨它。我的文章数据库引用一些简短的文章(只有一页)以及一些长文章(有20页)。而我不想让用户装载全部的文章,所以我们我们必须将文本文件分隔成许多小片段。先让我们再次看看数据库的设计。
文章数据库
现在你可能会注意到我参考的原始文本文件要包含到ArticleURL区域以及接下去的文件作为Page2URL,等等。
区域名字 数据类型 描述
ArticleID Autonumber 主键
Title varchar(75) 文章标题
ShortDesc varchar(255) 简短的描述
ArticleURL varchar(50) 文章第一页的文件名字
Page2URL varchar(50) 文章第二页的文件名字(如果文章很长)
Page3URL varchar(50) 文章第三页的文件名字(如果文章很长)
Page4URL varchar(50) 文章第四页的文件名字(如果文章很长)
示例数据
区域名字 示例
ArticleID 100
Title 文章标题
ShortDesc 文章的简短描述
ArticleURL 100.asp
Page2URL 100-2.asp
Page3URL 100-3.asp
Page4URL 100-3.asp
网站
现在我们需要对教程5中的代码进行一些修改。
在这个页面上第一件事情要做的是放置一个记录集,用于显示文章和作者。在所有的UltraDev记录集代码下面以及在标签上面增加以下的代码,手稿程序必须在UltraDev的'Go to Specific
Record'代码之后,这样ArticleURL才被正确取出。代码如下:
< %
Dim ArticleLink, ArticleFile
If Request.Form("ArticleLink") = "" then
ArticleLink = rsArticleID.Fields.Item("ArticleURL").Value
Else ArticleLink = Request.Form("ArticleLink")
End If
ArticleFile = Chr(34) & ArticleLink & Chr(34)
% >
其余的代码跟教程5中的一样。
现在我们将要在网页底部增加一些导航按钮。这些按钮将使得用户可以在不同页面上来回浏览,这些按钮及布置如图1所示。
(图1)
在每个表格单元,每一个提交按钮连接到它们自己的表单上。所以在该网页上有4个表单。每一个表单有两个隐藏区域:ArticleID
和 ArticleLink。下面让我们看看Page1按钮和Page2按钮,而Page3按钮和Page4按钮与Page2按钮一样,不用的示它们是使用PageURL或者Page4URL作为记录集数值。
< form name="form4" method="post"
action="ArticleInc.asp" >
< input type=hidden name="ArticleID" value="< %=(rsArticleID.Fields.Item("ArticleID").Value)%
>">
< input type=hidden name="ArticleLink" value="<
%=(rsArticleID.Fields.Item("ArticleURL").Value)% >">
< input type="submit" name="Submit" value="Page
1" >
< /form >
< %
'This code evaluates if Page2URL is NOT NULL, if so it shows the next page link
If ((rsArticlesAuthors.Fields.Item("Page2URL").Value)<>
"" ) Then % >
< form name="form4" method="post"
action="ArticleInc.asp" >
< input type=hidden name="ArticleID" value="<
%=(rsArticleID.Fields.Item("ArticleID").Value)% >">
">
< input type="submit" name="Submit" value="Page
2" >
< /form >
< %End If% >
下面我在简单解释上面的代码。用户进行搜索之后进入文章列表网页,上面显示文章标题、作者以及日期。点击ArticleName使用Go to Detail Page,它将重定向到ArticleInc.asp。而ArticleID将被传递给Stored Procedure(存储过程),这个存储过程只调用文章。我刚才展示给你的第一片段代码,你看是否有一个Request(请求)数值已经传递给ArticleLink。当第一页被转载的时候并没有发生,所以它缺省使用了Page 1的记录集数值(ArticleURL)。当用户点击Page 2按钮,表单就会使用从隐藏表单元素传来的ArticleID和ArticleLink数值再次被提交。这次重转载记录集仍保持相同的ArticleID,但是使用了要包括的文本文件的新的数值。值得庆幸的是,从记录集的网页其余部分(标题、作者等等)也同时被再次转载。用新包含的文本文件来调用一个网页是一种更好的方法,但是它将丢失开始的区段。
既然每一文章将总是有一个Page 1,按钮将总是出现在网页的底部。对于每一个接下来的按钮,语句IF..THEN计算了是否NextPageURL有一个数值。如果有的话,它将创建一个按钮,如果没有它就不会创建新按钮。自此我们已经创建了以下的功能:将文章文件分隔成小的片段,并且能动态地将它们包括进网页中,而且还川江了动态导航系统,使得用户可以在多页文章中来回浏览不同页的内容。