WITH TEMPLET意思是
生成的页面架构将采用某个已设定的模板
在此之前我的一篇教程中介绍过
希望各位在看本教程之前对ASP采用模板应熟悉下
ASP转变为HTML不要我再说ASP转变成HTML的好处了吧其中最值得知道的就是静态HTML页和动态页对服务器的要求承受能力小得多同样静态HTML搜索几率远比动态页面的多得多
那么我现在需要处理的技术问题就是
如何实现模板技术?
如何实现HTML技术?
如何让模板技术与HTML技术结合?
一先进行技术原理分析
模板技术参看
如何使得ASP页面转变为HTML?一般都会想到FSO组件因为该组件能新建任何文件格式
那么其整个运行过程是怎么样的呢?
a提供信息输入页面进行信息收集
b接受信息值先保存数据库再FSO生成文件
c技术性完成任务显示刚被创建的HTML文件的路径地址 该技术的实现过程中有如下几个难点
iFSO生成的文件是直接放在一个大文件夹下还是单独放在某个每日更新的子文件夹中?可能表述不准确这样理解吧相信通过FSO生成的文件随着时间的推移文件会越来越多管理也会越来越乱……通常你可能看到一些地址诸如 /a//l 可以分析得出应该是建立了当前日期的文件夹这样一天就是一个文件夹的页面内容查看管理也就显得比较合理
ii我在试图通过以上方法建立文件夹的时候又发现了第二个问题第一次通过FSO建立以当前日期命名的文件夹没有问题当我有新的文件需要生成时因为是同一个程序所以其又将会执行建立同样的文件夹此时FSO组件会发现该路径已存在……卡壳_! 继续处理在首行添加代码On Error Resume Next达到自欺欺人掩耳盗铃的效果
当然规矩的用法是判断文件夹的有无
<%
Set fso = ServerCreateObject(ScriptingFileSystemObject)
if (fsoFolderExists(ServerMapPath(folder))) then
判断如果存在就不做处理
else
判断如果不存在则建立新文件夹
fsoCreateFolder(ServerMapPath(folder))
end if
%>
iii文件夹是建立了文件该如何建立呢?主要也就是文件名的生成当然这个就需要自己来写个函数功能就是如何生成文件名
<%
function makefilename(fname)
fname = fname 前fname为变量后fname为函数参数引用
fname = replace(fname)
fname = replace(fname )
fname = replace(fname:)
fname = replace(fnamePM)
fname = replace(fnameAM)
fname = replace(fname上午)
fname = replace(fname下午)
makefilename = fname & l
end function
%>
引用函数则<%fname = makefilename(now())%>
其实嘛就是以年月日时分秒命名的文件
iv最后生成的文件该如何查看到?当然需要把生成文件的路径保存的数据库中并且添加到相对应的记录集中了当然这在下面的数据库设计时会提及到
模板技术和HTML技术的结合将模板中特殊代码的值替换为从表单接受过来的值完成模板功能将最终替换过的所有模板代码生成HTML文件需要注意的是替换应能将输入数据的格式或者支持UBB的代码彻底改变
二再进行数据库设计
目前数据库的设计需要两个表一个是存放模板数据的一个是存放信息内容的 建立新数据库asphtmlmdb
设计新数据库表c_moban
字段m_id(自动编号主关键字)字段m_html(备注类型)
并将下列完整的代码拷贝至m_html字段
<html>
<head>
<meta httpequiv=ContentType content=text/html; charset=hz>
<title>CnbruceCom | ASPHTML TEST</title>
</head>
<body leftmargin= topmargin=>
<table width=% height=% border= cellpadding= cellspacing=>
<tr align=right bgcolor=#CCCCCC>
<td height= colspan=>$cntop{LogContent}lt;/td>
</tr>
<tr valign=top>
<td width=% bgcolor=#eee>$cnleft{LogContent}lt;/td>
<td width=% bgcolor=#fff>$cnright{LogContent}lt;/td>
</tr>
</table>
</body>
</html>
设计新数据库表c_news
字段c_id自动编号主关键字
字段c_title文本类型保存文章标题
字段c_content备注类型保存文章内容
字段c_filepath文本类型保持生成文件的路径地址
字段c_time日期/时间类型默认值Now()
三页面需求设计
首先建立一个存放HTML页的文件夹
在文件同一目录下建立文件夹newsfile夹子内部主要存放生成的HTML页面当然内部还会采用程序方式建立以日期命名的子文件夹以方便浏览以及管理
功能函数页面libasp
<%
生成文件名的函数
function makefilename(fname)
fname = fname
fname = replace(fname)
fname = replace(fname )
fname = replace(fname:)
fname = replace(fnamePM)
fname = replace(fnameAM)
fname = replace(fname上午)
fname = replace(fname下午)
makefilename=fname & shtml
end function
保持数据格式不变的函数
function HTMLEncode(fString)
fString = replace(fString > >)
fString = replace(fString < <)
fString = Replace(fString CHR() )
fString = Replace(fString CHR() )
fString = Replace(fString CHR() & CHR() <br>)
fString = Replace(fString CHR() <br>)
HTMLEncode = fString
end function
%>
数据库连接页面connasp
完成数据库的字符串连接方法
<%
set conn = ServerCreateObject(ADODBConnection)
connstr = Provider=MicrosoftJetOLEDB;Data Source=&ServerMapPath(asphtmlmdb)
connOpen connstr
%>
信息输入页面l
其实很简单就是表单嘛注意action是跳转到additasp
<form action=additasp method=post>
Title:<input type=text name=c_title><br>
Content:<br>
<textarea name=c_content rows= cols=></textarea><br>
<input type=submit value=Add>
<input type=reset value=Reset>
</form>
处理数据功能显示页面additasp
首先是处理接受过来的数据并将值写入数据库接着将模板代码进行引用并将其中特殊代码转换为接受值最终通过FSO生成HTML页面其中需要注意的还有生成文件的路径地址保存至数据库表
<%容错处理
On Error Resume Next
%>
<!#include file=connasp >
<!#include file=libasp >
<%接受传递值
c_title=requestform(c_title)
c_content=requestform(c_content)
%>
<%生成HTML文件名建立文件夹指定文件路径
fname = makefilename(now()) makefilename为自定义函数
folder = newsfile/&date()&/
filepath = folder&fname
%>
<%将接受值及路径保持至数据库表
sql = Select * from c_news
Set rs = ServerCreateObject (ADODBRecordset)
rsOpen sqlconn
rsaddnew
rs(c_title)=c_title
rs(c_content)=c_content
rs(c_filepath)=filepath
rsupdate
rsclose
Set rs = Nothing
%>
<%打开模板代码并将其中特殊代码转变为接受值
sql=select m_idm_html from c_moban where m_id=
set rs=ServerCreateObject(adodbrecordset)
rsopen sqlconn
mb_code=rs(m_html)
rsclose
set rs=nothing
connclose
set conn=nothing
c_title=htmlencode(c_title)
c_content=htmlencode(c_content)
mb_code=replace(mb_code$cntop{LogContent}quot;now())
mb_code=replace(mb_code$cnleft{LogContent}quot;c_title)
mb_code=replace(mb_code$cnright{LogContent}quot;c_content)
%>
<%生成HTML页面
Set fso = ServerCreateObject(ScriptingFileSystemObject)
fsoCreateFolder(ServerMapPath(folder))
Set fout = fsoCreateTextFile(ServerMapPath(filepath))
foutWriteLine mb_code
foutclose
%>
文章添加成功<a >浏览</a>
显示数据库表记录并做指向HTML页的链接showitasp
<!#include file=connasp >
<!#include file=libasp >
<%
Set rs = ServerCreateObject (ADODBRecordset)
sql = Select * from c_news order by c_id desc
rsOpen sqlconn
%>
<%
if rsEOF and rsBOF then
responsewrite (暂时还没有文章<a href=l>添加</a>)
else
Do Until rsEOF
%>
<table width= border= align=center cellpadding= cellspacing= bgcolor=#>
<tr>
<td width= align=right bordercolor=#CCCCCC bgcolor=#CCCCCC><%=rs(c_time)%></td>
<td width= bordercolor=#fff bgcolor=#fff><a href=<%=rs(c_filepath)%> target=a_blank><%=rs(c_title)%></a></td>
</tr>
<tr>
<td valign=top align=right bordercolor=#ececec bgcolor=#ececec>[<a href=delasp?c_id=<%=rs(c_id)%>>Dell</a>][<a href=changeasp?c_id=<%=rs(c_id)%>>Edit</a>][<a >Add</a>]</td>
<td valign=top bordercolor=#FFFFFF bgcolor=#FFFFFF><%=htmlencode(rs(c_content))%></td>
</tr>
</table><br>
<%
rsMoveNext
Loop
end if
%>
<%
rsclose
Set rs = Nothing
connclose
set conn=Nothing
%>
修改数据内容页changeasp
修改数据内容同时也需要修改更新对应的HTML页面修改其实就是重新生成文件且文件名和之前一样类似文件的覆盖
<!#include file=connasp >
<!#include file=libasp >
<%id=requestquerystring(c_id)%>
<%
if requestform(submit)=change then
c_title=requestform(c_title)
c_content=requestform(c_content)
c_id=requestform(c_id)
c_filepath=requestform(c_filepath)
Set rs = ServerCreateObject (ADODBRecordset)
sql = Select * from c_news where c_id=&c_id
rsOpen sqlconn
rs(c_title)=c_title
rs(c_content)=c_content
rs(c_time)=now()
rsupdate
rsclose
Set rs = Nothing
%>
<%打开模板代码并将其中特殊代码转变为接受值
sql=select m_idm_html from c_moban where m_id=
set rs=ServerCreateObject(adodbrecordset)
rsopen sqlconn
mb_code=rs(m_html)
rsclose
set rs=nothing
connclose
set conn=nothing
c_title=htmlencode(c_title)
c_content=htmlencode(c_content)
mb_code=replace(mb_code$cntop{LogContent}quot;now())
mb_code=replace(mb_code$cnleft{LogContent}quot;c_title)
mb_code=replace(mb_code$cnright{LogContent}quot;c_content)
%>
<%生成HTML页面
Set fso = ServerCreateObject(ScriptingFileSystemObject)
Set fout = fsoCreateTextFile(ServerMapPath(c_filepath))
foutWriteLine mb_code
foutclose
%>
<%responseredirect(showitasp)%>
<%end if%>
<%
if id<> then
Set rs = ServerCreateObject (ADODBRecordset)
sql=select * from c_news where c_id=&id
rsOpen sqlconn
c_id=rs(c_id)
c_filepath=rs(c_filepath)
c_title=rs(c_title)
c_content=rs(c_content)
end if
%>
<form action=changeasp method=post>
Title:<input type=text name=c_title value=<%=c_title%>><br>
Content:<br>
<textarea name=c_content rows= cols=><%=c_content%></textarea><br>
<input type=submit value=change name=submit>
<input type=reset value=Reset>
<input name=c_id type=hidden value=<%=id%>>
<input name=c_filepath type=hidden value=<%=c_filepath%>>
</form>
删除记录页delasp
同样!删除除了删除数据库表中的记录与其对应的HTML页面也需删除代码如下
<!#include file=connasp >
<%
c_id = requestquerystring(c_id)
sql = Select * from c_news where c_id=&c_id
Set rs = ServerCreateObject (ADODBRecordset)
rsOpen sqlconn
filepath=rs(c_filepath)
Set fso = CreateObject(ScriptingFileSystemObject)
fsoDeleteFile(Servermappath(filepath))
Set fso = nothing
rsdelete
rsclose
Set rs = Nothing
connclose
set conn=nothing
%>
<%responseredirect(showitasp)%>
四其它功能
模板管理页面
不会每次都是打开数据库表进行增加或者修改模板代码吧所以管理代码的页面程序不能少了自己捣鼓下应该很简单的当然之前管理员的登录认证程序就不在书中交代了)还有如果设计了多个模板那么在发表信息的时候应添加模板选择单选框同样在执行转换HTML时SQL选择的不同m_id了
不管怎么说先把这些技术自己调试感受下多多操作相信读书千遍其意自见