过程|技巧|网页
摘要:本文介绍了用ASP进行网页设计过程中的几个小技巧,包括新闻栏的创建和自动更新,以及公告栏的创建、使用和维护。指明了解决此类问题的大致方法。
Abstract: We introduce several tricks when using Active Server Pages to design homepages. These include the creation and automatic updating of news columns, as well as the creation, utilization and maintenance of bulletins. The general solutions to these problems are pointed out.
关键词:ASP、新闻栏、公告栏
ASP是Microsoft公司推出的一种用以取代通用网关接口的技术,英文全称Active Server Pages。它是一个Web服务器端的运行环境。ASP本身包含了VBScript和javascript引擎,使得脚本可以直接嵌入HTML中。现将我们在ASP运用过程中的几个小技巧与大家分享。
一、新闻栏
大多数网页上有新闻栏,用以显示最近新闻的主题,点击此主题即可查看详细报道。倘若每天都一条条写在网页上,再依次建立链接太过麻烦。如何让其可以根据文件自动更新呢?
1.预备工作:
1)建一个文件夹,起名为"news",假设存于D:/ASP/目录下;
2)把每条新闻的详细内容写入文件,且此文件的命名形式为:x (newstime).htm。其中x为此条新闻的主题,newstime为此条新闻发布的时间(按年-月-日顺序写)。为什么要这样写呢?看了下面的算法思想和源程序就知道了。
2.算法思想:对于news文件夹中的文件,依据它们文件名中新闻发布的时间(即括号内的内 容),从大到小排序。这样一来,最新的新闻排在最上面,只要在网页相应位置显示 news文件夹中最上面的若干个文件名,因为文件名的命名方式如1中所述,就可以在新闻栏中显示最新新闻了。
3.源程序段(用VBScript编写的)
<%
Dim fs, f, f1, fc, filenum
dim count
dim i,j,t1,t2
dim file(100)
dim mystr(100) '标志文件中日期的字符串
count=0
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder("D:/ASP/news ")
Set fc = f.Files
for each f1 in fc
count=count+1 '计文件个数
file(count)=fs.getbasename(f1) '标记文件基名
mypos=InStr(1, file(count), "(") ')在文件基名中的位置
'文件基名中的日期字符串
mystr(count) = Mid(file(count), mypos + 1, Len(file(count)) - (mypos + 1))
next
for i=1 to count
for j=1 to count-i
if mystr(j)<mystr(j+1) then
t1=file(j)
file(j)=file(j+1
file(j+1)=t1
t2=mystr(j)
mystr(j)=mystr(j+1)
mystr(j+1)=t2
end if
next
next
j=1
if count<10 then '新闻栏中共显示10条新闻
temcount=count
else
temcount=10
end if
do while j<=temcount%>
<a href=".htm">file:///D:/ASP/news/<%=file(j)%>.htm" target="new_window"><%=file(j)%> </a>
<%
j=j+1
loop
%>
4.新闻栏内容更新:
只要养成良好的书写习惯,使得新闻的名称遵照1的要求,再把写好的文件存入news文件夹,新闻栏就会自动显示出最新的10条新闻了。
二、公告栏
除了新闻栏之外,较常用的就是公告栏了,公告栏主要用来显示一些重要的通知。当然这些通知是要经常变化的。让用户每次更改公告内容时都到源程序里去修改吗?当然不行,我们必须提供一个维护的界面给用户,使得用户只要输入通知,网页上的公告栏里自然就会显示通知内容了。
1.解决这一问题的关键在于灵活应用FileSystemObject对象和TextStream对象。在实际应用中,你无需自行建立TextStream对象,因为只要利用FileSystemObject对象打开了文件,系统便自动建立TextStream对象。也就是说,一旦调用OpenTextFile或CreateTextFile方法,便会传回TextStream对象。
2.所需相关文件有三个:更新.asp、公告.asp、维护文本.txt,把它们存入d:/ASP/maintain目录下。
3.三个文件的主要功能和源程序段:
1)更新.asp
主要功能是让用户输入欲显示的公告,检验输入内容是否为空,若不为空,则提交给”公告.asp”程序处理。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>更新公告栏内容</title>
</head>
<body>
<script language=vbscript>
function datacheck()
dim msg,errflag
errflag=true
if len(trim(maintain.t1.value))=0 then
focusto(0)
errflag=false
msg="请输入需提交的公告内容"
end if
if (errflag=false) then
msgbox msg,64,"oh no!"
exit function
end if
datacheck=errflag
maintain.submit
end function
sub focusto(x)
document.maintain.elements(x).focus()
end sub
</script>
①<form method="POST" action="公告.asp" name="maintain">
<p><input type="text" name="t1" size="84"><input type="reset" value="重写" name="B2">
<input type="button" value="提交" name="B1" ></p>
<hr color=#FF99FF size=1>
</form>
</body>
</html>
语句①中的action="公告.asp"部分,指出了在form提交后要启动的程序为“公告.asp”。
2)公告.asp
通过FileSystemObject对象和TextScream对象对"维护文本.txt"文件进行读写操作,使得此文件最上面5行的内容为要在公告栏里显示的公告。
<%
dim str
str=request.form(t1)
dim s(5)
const forreading=1,forwriting=2
dim fso,myfile
set fso=server.createobject("scripting.FileSystemObject")
set myfile=fso.opentextfile("维护文本.txt",forreading)'以Reading模式打开文件
for i=1 to 5 '公告栏共显示5条公告
s(i)=myfile.readline'读取文件内容
next
myfile.close
set myfile=fso.opentextfile("维护文本.txt",forwriting,true) '以writing模式打开文件
myfile.writeline str
for i=1 to 4
myfile.writeline s(i) '将数据写回文件
next
myfile.close
%>
3)维护文本.txt
此文件开始为空,从”更新.asp”显示的界面输入公告后,此文件内容被自动写入。
4.在主页文件(通常是default.asp)欲显示公告位置的代码段中加入如下代码,即可显示出更新后的公告。
<marquee scrollamount="2" scrolldelay="50" direction="up" width="223" height="133" id="a" >'公告栏上下滚动
<%
Dim s(20)
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.OpenTextFile("D:/ASP/maintain/维护文本.txt",1,true)
for i=1 to 5
ReadLineTextFile=MyFile.ReadLine
s(i)=ReadLineTextFile
response.write "★ " & s(i)
response.write "<br>"
next
%>
</marquee>
上述两个小技巧举一反三,可以解决很多此类问题。网页设计爱好者们不妨一试。