為了提高百度或google的收入,很多新聞網站都將內容生成靜態頁面,武林網CUOXIN選擇的該篇文章就詳細地介紹了生成HTML文件的新聞系統的創建方法。
一般的傳遞ID值的新聞系統見得比較多,制作起來也不是很復雜。但是我們在新浪或是其它的門戶類網站看到到的新聞不是用ID傳遞的,而是一個HTML或是Shtml文件,難道手工加上去的嗎?當然不是了,其實這用到的是ASP中的FileSystemObject對象的方法。
接著往下說說如何實現這一功能。
首先考慮文件名的格式及文件的存放路徑。路徑可以這樣假設:
存放的路徑:
如果把所有的HTML文件或是所有的SHTML文件都放在同一目錄下,當同時訪問的人增多以后,勢必會影響服務器正常的運行,所以明智的方法就是把這些文件按加入的日期進行分類。
文件名的格式:
為了避免出現重名的文件,一般的命名規則是當天的日期+時間+隨機數+后綴名。
function makefilename()
fname = now()
fname = replace(fname,"-","")
fname = replace(fname," ","")
fname = replace(fname,":","")
fname = replace(fname,"PM","")
fname = replace(fname,"AM","")
fname = replace(fname,"上午","")
fname = replace(fname,"下午","")
randomize
ranNum=int(90000*rnd)+10000 '生成隨機數
fname = fname&fanNum
makefilename=fname & ".shtml"
end function
這段函數就可以生成所需要的文件名及生成的文件的后綴名,當前的后綴名為.shtml,您也可以改成HTML或是ASP。
剛提到的是文件的命名,現在再來說一下文件的存放路徑!
前面提到了,每個文件按加入的日期進行分類,那如何確定路徑呢?同樣用FSO生成。
用FSO中的folderExists方面來判斷目錄是否存在,如果存在就不需要重建立了,只需將HTML寫入該目錄下(這是后話了)。如果folderExists方法取得的值為false則表示目錄不存在,就要用createfolder方法生成了。
formPath=datepart("yyyy",now())&"_"&datepart("m",now())&"_"&datepart("d",now()) '建立目錄名,生成的文件將按存放在此處
set objfso = server.createobject("scripting.filesystemobject")
if not objfso.folderexists(server.mappath(formPath)) then '如果該目錄不存在
objfso.createfolder(server.mappath(formPath)) '創建一個文件夾
end if
set objfso = nothing
目錄就這樣建立了。每次FSO生成文件時都進行判斷一下,不過這樣不知道會不會影響效率,大家可以有什么好的想法可以談一談。
先看一個模板:
<html>
<head>
<title>檸檬樹下----[title]</title>
</head>
<body>
[news_title]
<br>
作者:[author] 來源:[source] 加入日期:[add_time]
<br>
[content]
</body>
</html>
這是一個最簡單的模板了,里面的用[]括起來的是什么東東呢?那就是即將要被替換的新聞標題、內容、作者等等。
先不管這個模板漂不漂亮,先寫入數據表,在后面的用的喲!
下面將談談核心部分了,如何生成HTML的呢?
把前面的模板寫入數據表,這里給出表的結構,當然是簡單的一種Template表
T_ID 'ID值,自動編號
T_name '模板名稱
T_content '模板代碼
在編輯器中寫好新聞后,在處理頁里的執行過程是這樣的:
(1)取得表單中的各變量值
(2)從Template表中取得模板代碼
(3)將模板中的[]括起來的東東替換成相應的表單值,如[autor]就替換成表單中取得的作者名
(4)FSO生成HTML文件
(5)將新聞寫入數據表(為什么要寫入?以便以后的編輯)
'這里查詢模板
strsql = "select * from templet where T_name='"&templet_name&"' "
objrs.open strsql,conn,1,1
content = objrs("content")
objrs.close
'開始替換,其中的title/strcontet都是從表單中取得的,前面的代碼略去
content = replace(content,"[title]",title)
content = replace(content,"[content]",strcontent)
content = replace(content,"[source]",source)
content = replace(content,"[author]",author)
content = replace(content,"[add_time]",now())
'然后將新聞寫入數據表
strsql = "insert into news---------------"
conn.execute strsql,intno '執行之
if intno <> 0 then '如果執行結果不為0表示執行成功,則開始寫入了
set objfso = server.createobject("scripting.filesystemobject")
formPath=datepart("yyyy",now())&"_"&datepart("m",now())&"_"&datepart("d",now()) '建立目錄名,生成的文件將按存放在此處
filename = server.mappath(formpath& "/" &makefilename)
if objfso.folderexists(server.mappath(formPath)) then '如果該目錄存在
Set file = objfso.CreateTextFile(formpath&"/"&fname)
file.WriteLine content
file.close
else
objfso.createfolder(server.mappath(formPath)) '創建一個文件夾
Set file = objfso.CreateTextFile(formpath&"/"&fname)
file.WriteLine content
file.close
end if
set objfso = nothing
else
response.write "寫入數據失敗!"
response.end
end if
編輯時無非就是重新從數據表中調用該新聞內容,update后重新用FSO寫入!
該文章比較詳細地介紹了典型新聞系統生成HTML文件的方法,希望對大家有所幫助。
新聞熱點
疑難解答