zoukankan      html  css  js  c++  java
  • asp2html

    初学ASP,程序是能勉强写出来了,但若每进行一次网站页面的改版,所有的源程序都将进行一次移植手术。为此所耗费的人力精力不计其数,

    甚至一不小心得不偿失、前功尽弃。

    所以,梦想着那么大段的程序代码变成几个简单的字符代替,这样只要设计好页面把该功能插入就OK了。其实这也简单,只需将实现该功能的程

    序代码做成子程序,然后主页调用就可以了。

    很多时候,在博客中国,你会选择到很多的模板,甚至有可能自己来设计;或者采用猪飞飞BLOG的各大站长都将其站点改得不近相同……这些,

    我们都归功于ASP采用模板的功能。

    那下面偶就借花献佛,将模板拿来分析,以馈各位朋友。

    首先,模板需要在线修改,则应采用数据库保存模板代码

    所谓的模板,就是设计完工的标准的HTML代码,其中需要由程序实现的功能部分将采用特殊字符串代替。然,这些特殊字符串需要在显示的时

    候被编译为对应的功能。

    1,设计数据库testmb.mdb
    新建表moban:字段m_id(自动编号,主关键字);字段m_html(备注类型)

    2,假设第一模板内容代码

    将下列代码拷贝到m_html字段中


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>testmb</title>
    </head>
    <body leftmargin="0" topmargin="0">
    <table width="100%" height="100%" border="0" cellpadding="5" cellspacing="2">
    <tr align="right" bgcolor="#CCCCCC">
    <td height="20" colspan="2">$cntop$</td>
    </tr>
    <tr valign="top">
    <td width="25%" bgcolor="#e5e5e5">$cnleft$</td>
    <td width="74%" bgcolor="#f3f3f3">$cnright$</td>
    </tr>
    </table>
    </body>
    </html>


    注意$cntop$、$cnleft$、$cnright$,它们将要实现某些具体的程序功能

    3,建立数据库连接文件conn.asp

    <%
    set conn= Server.CreateObject("ADODB.Connection")
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("testmb.mdb")
    conn.Open connstr
    %>


    4,建立特殊字符串转换所需要的库文件lib.asp

    该文件的主要作用是将实现某些功能的ASP程序做成字程序,以方便调用。

    <%
    dim topcode
    sub cntop()
    topcode="现在时间是:"
    topcode=topcode&now()
    end sub

    dim leftcode,i
    sub cnleft()
    for i = 1 to 5
    leftcode=leftcode&"<p>cnbruce.com"
    next
    end sub

    dim rightcode
    sub cnright()
    for i = 1 to 9
    rightcode=rightcode&"<hr color="&i&i&i&i&i&i&">"
    next
    end sub
    %>


    5,最后,调用数据库中的模板代码,将特殊字符串转换。

    <!--#include file="conn.asp" -->
    <!--#include file="lib.asp" -->
    <%
    sql="select * from moban where m_id=1"
    set rs=Server.CreateObject("adodb.recordset")
    rs.open sql,conn,1,1
    mb_code=rs("m_html")
    rs.close
    set rs=nothing

    cntop()
    mb_code=replace(mb_code,"$cntop$",topcode)
    cnleft()
    mb_code=replace(mb_code,"$cnleft$",leftcode)
    cnright()
    mb_code=replace(mb_code,"$cnright$",rightcode)

    response.write mb_code
    %>

    1,WITH TEMPLET意思是,生成的页面架构将采用某个已设定的模板,在此之前我的一篇教程中介绍过,希望各位在看本教程之前对ASP采用模

    板应熟悉下。(当然,不看也没有问题,本教程同样会提及精华部分的:)具体参考:http://www.cnbruce.com/blog/showlog.asp?

    cat_id=26&log_id=474

    2,ASP2HTML。不要我再说ASP转变成HTML的好处了吧,呵呵,其中最值得知道的就是:静态HTML页和动态页对服务器的要求承受能力小得多

    ,同样,静态HTML搜索几率远比动态页面的多得多。

    那么,我现在需要处理的技术问题就是:
    1,如何实现模板技术?(先参看下上篇文章吧)
    2,如何实现2HTML技术?
    3,如何让模板技术与2HTML技术结合?

    一、先进行技术原理分析

    1,模板技术参看 http://www.cnbruce.com/blog/showlog.asp?cat_id=26&log_id=474

    2,2HTML技术又该如何实现呢?如何使得ASP页面转变为HTML?一般都会想到FSO组件,因为该组件能新建任何文件格式。

    那么其整个运行过程是怎么样的呢?
    a,提供信息输入页面进行信息收集;
    b,接受信息值先保存数据库,再FSO生成文件;
    c,技术性完成任务,显示刚被创建的HTML文件的路径地址。

    该技术的实现过程中有如下几个难点:

    i,FSO生成的文件是直接放在一个大文件夹下,还是单独放在某个每日更新的子文件夹中?可能表述不准确,这样理解吧:相信通过FSO生成的

    文件随着时间的推移,文件会越来越多,管理也会越来越乱……通常你可能看到一些地址诸如 http://www.xxx.com/a/2004-5-

    20/200405201111.html 可以分析得出应该是建立了当前日期的文件夹。这样,一天就是一个文件夹的页面内容,查看管理也就显得比较合理。

    ii,我在试图通过以上方法建立文件夹的时候,又发现了第二个问题。第一次通过FSO建立以当前日期命名的文件夹,没有问题。当我有新的文件

    需要生成时,因为是同一个程序,所以,其又将会执行建立同样的文件夹。此时,FSO组件会发现该路径已存在……卡壳-_-! 继续处理,在首行添

    加代码:

    On Error Resume Next
     

    嘿嘿,达到自欺欺人、掩耳盗铃的效果。

    当然规矩的用法是判断文件夹的有无

    <%
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    if (fso.FolderExists(Server.MapPath(folder))) then
    '判断如果存在就不做处理
    else
    '判断如果不存在则建立新文件夹
    fso.CreateFolder(Server.MapPath(folder))
    end if
    %>


    iii,文件夹是建立了,文件该如何建立呢?主要也就是文件名的生成。当然这个就需要自己来写个函数,功能就是如何生成文件名:)


    <%
    function makefilename(fname)
    fname = fname '前fname为变量,后fname为函数参数引用
    fname = replace(fname,"-","")
    fname = replace(fname," ","")
    fname = replace(fname,":","")
    fname = replace(fname,"PM","")
    fname = replace(fname,"AM","")
    fname = replace(fname,"上午","")
    fname = replace(fname,"下午","")
    makefilename = fname & ".html"
    end function
    %>

    引用函数则:
    <%fname = makefilename(now())%>

    其实嘛,就是以年月日时分秒命名的文件。

    iv,最后,生成的文件该如何查看到?当然需要把生成文件的路径保存的数据库中,并且添加到相对应的记录集中了。当然,这在下面的数据库设

    计时会提及到。

    3,模板技术和2HTML技术的结合:将模板中特殊代码的值替换为从表单接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML

    文件。需要注意的是:替换应能将输入数据的格式或者支持UBB的代码彻底改变。


    二,再进行数据库设计

    目前数据库的设计需要两个表:一个是存放模板数据的;一个是存放信息内容的。

    1,建立新数据库asp2html.mdb

    2,设计新数据库表c_moban
    字段m_id(自动编号,主关键字);字段m_html(备注类型)。
    并将下列完整的代码拷贝至m_html字段


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=hz">
    <title>Cnbruce.Com | ASP2HTML TEST</title>
    </head>
    <body leftmargin="0" topmargin="0">
    <table width="100%" height="100%" border="0" cellpadding="5" cellspacing="2">
    <tr align="right" bgcolor="#CCCCCC">
    <td height="20" colspan="2">$cntop$</td>
    </tr>
    <tr valign="top">
    <td width="25%" bgcolor="#e5e5e5">$cnleft$</td>
    <td width="74%" bgcolor="#f3f3f3">$cnright$</td>
    </tr>
    </table>
    </body>
    </html>


    3,设计新数据库表c_news

    字段c_id:自动编号,主关键字
    字段c_title:文本类型,保存文章标题
    字段c_content:备注类型,保存文章内容
    字段c_filepath:文本类型,保持生成文件的路径地址
    字段c_time:日期/时间类型,默认值:Now()


    三,页面需求设计

    1,首先建立一个存放HTML页的文件夹

    在文件同一目录下,建立文件夹newsfile,夹子内部主要存放生成的HTML页面,当然内部还会采用程序方式建立以日期命名的子文件夹,以方便

    浏览以及管理。

    2,功能函数页面lib.asp


    <%
    '生成文件名的函数
    function makefilename(fname)
    fname = fname
    fname = replace(fname,"-","")
    fname = replace(fname," ","")
    fname = replace(fname,":","")
    fname = replace(fname,"PM","")
    fname = replace(fname,"AM","")
    fname = replace(fname,"上午","")
    fname = replace(fname,"下午","")
    makefilename=fname & ".shtml"
    end function

    '保持数据格式不变的函数
    function HTMLEncode(fString)
    fString = replace(fString, ">", "&gt;")
    fString = replace(fString, "<", "&lt;")
    fString = Replace(fString, CHR(32), "&nbsp;")
    fString = Replace(fString, CHR(13), "")
    fString = Replace(fString, CHR(10) & CHR(10), "<br>")
    fString = Replace(fString, CHR(10), "<br>")
    HTMLEncode = fString
    end function
    %>


    3,数据库连接页面conn.asp
    完成数据库的字符串连接方法


    <%
    set conn = Server.CreateObject("ADODB.Connection")
    connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("asp2html.mdb")
    conn.Open connstr
    %>


    4,信息输入页面add.html
    其实很简单:)就是表单嘛。注意action是跳转到addit.asp

    <form action="addit.asp" method="post"> Title:<input type="text" name="c_title"><br> Content:<br> <textarea name="c_content" rows="8"

    cols="30"></textarea><br> <input type="submit" value="Add"> <input type="reset" value="Reset"> </form>

    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    5,处理数据功能显示页面addit.asp
    首先是处理接受过来的数据,并将值写入数据库;接着将模板代码进行引用,并将其中特殊代码转换为接受值,最终通过FSO生成HTML页面。其

    中需要注意的还有,生成文件的路径地址保存至数据库表。

    <%'容错处理
    On Error Resume Next
    %>

    <!--#include file="conn.asp" -->
    <!--#include file="lib.asp" -->

    <%'接受传递值
    c_title=request.form("c_title")
    c_content=request.form("c_content")
    %>

    <%'生成HTML文件名,建立文件夹,指定文件路径
    fname = makefilename(now()) 'makefilename为自定义函数
    folder = "newsfile/"&date()&"/"
    filepath = folder&fname
    %>

    <%'将接受值及路径保持至数据库表
    sql = "Select * from c_news"
    Set rs = Server.CreateObject ("ADODB.Recordset")
    rs.Open sql,conn,3,2
    rs.addnew
    rs("c_title")=c_title
    rs("c_content")=c_content
    rs("c_filepath")=filepath
    rs.update
    rs.close
    Set rs = Nothing
    %>

    <%'打开模板代码,并将其中特殊代码转变为接受值
    sql1="select m_id,m_html from c_moban where m_id=1"
    set rs1=Server.CreateObject("adodb.recordset")
    rs1.open sql1,conn,1,1
    mb_code=rs1("m_html")
    rs1.close
    set rs1=nothing
    conn.close
    set conn=nothing
    c_title=htmlencode(c_title)
    c_content=htmlencode(c_content)
    mb_code=replace(mb_code,"$cntop$",now())
    mb_code=replace(mb_code,"$cnleft$",c_title)
    mb_code=replace(mb_code,"$cnright$",c_content)
    %>

    <%'生成HTML页面
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    fso.CreateFolder(Server.MapPath(folder))
    Set fout = fso.CreateTextFile(Server.MapPath(filepath))
    fout.WriteLine mb_code
    fout.close
    %>

    文章添加成功,<a href="showit.asp">浏览</a>


    6,显示数据库表记录,并做指向HTML页的链接:showit.asp


    <!--#include file="conn.asp" --> <!--#include file="lib.asp" --> <% Set rs = Server.CreateObject ("ADODB.Recordset") sql = "Select * from

    c_news order by c_id desc" rs.Open sql,conn,1,1 %> <% if rs.EOF and rs.BOF then response.write ("暂时还没有文章,<a href=add.html>添加

    </a>") else Do Until rs.EOF %> <table width="758" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#000000"> <tr> <td

    width="159" align="right" bordercolor="#CCCCCC" bgcolor="#CCCCCC"><%=rs("c_time")%></td> <td width="591" bordercolor="#f3f3f3"

    bgcolor="#f3f3f3"><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=del.asp?c_id=<%=rs("c_id")%>>Dell</a>][<a href=change.asp?c_id=<%=rs("c_id")%

    >>Edit</a>][<a href="add.html">Add</a>]</td> <td valign="top" bordercolor="#FFFFFF" bgcolor="#FFFFFF"><%=htmlencode(rs

    ("c_content"))%></td> </tr> </table><br> <% rs.MoveNext Loop end if %> <% rs.close Set rs = Nothing conn.close set conn=Nothing %>

    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    7,修改数据内容页change.asp

    修改数据内容,同时也需要修改更新对应的HTML页面。修改其实就是重新生成文件,且文件名和之前一样,类似文件的覆盖。


    <!--#include file="conn.asp" --> <!--#include file="lib.asp" --> <%id=request.querystring("c_id")%> <% if request.form("submit")="change" then

    c_title=request.form("c_title") c_content=request.form("c_content") c_id=request.form("c_id") c_filepath=request.form("c_filepath") Set rs =

    Server.CreateObject ("ADODB.Recordset") sql = "Select * from c_news where c_id="&c_id rs.Open sql,conn,3,2 rs("c_title")=c_title rs

    ("c_content")=c_content rs("c_time")=now() rs.update rs.close Set rs = Nothing %> <%'打开模板代码,并将其中特殊代码转变为接受值

    sql1="select m_id,m_html from c_moban where m_id=1" set rs1=Server.CreateObject("adodb.recordset") rs1.open sql1,conn,1,1 mb_code=rs1

    ("m_html") rs1.close set rs1=nothing conn.close set conn=nothing c_title=htmlencode(c_title) c_content=htmlencode(c_content)

    mb_code=replace(mb_code,"$cntop$",now()) mb_code=replace(mb_code,"$cnleft$",c_title) mb_code=replace(mb_code,"$cnright$",c_content) %>

    <%'生成HTML页面 Set fso = Server.CreateObject("Scripting.FileSystemObject") Set fout = fso.CreateTextFile(Server.MapPath(c_filepath))

    fout.WriteLine mb_code fout.close %> <%response.redirect("showit.asp")%> <%end if%> <% if id<>"" then Set rs = Server.CreateObject

    ("ADODB.Recordset") sql="select * from c_news where c_id="&id rs.Open sql,conn,1,1 c_id=rs("c_id") c_filepath=rs("c_filepath") c_title=rs

    ("c_title") c_content=rs("c_content") end if %> <form action="change.asp" method="post"> Title:<input type="text" name="c_title" value=<%

    =c_title%>><br> Content:<br> <textarea name="c_content" rows="8" cols="30"><%=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>

    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    8,删除记录页del.asp

    同样!删除,除了删除数据库表中的记录,与其对应的HTML页面也需删除。代码如下:


    <!--#include file="conn.asp" -->

    <%
    c_id = request.querystring("c_id")
    sql = "Select * from c_news where c_id="&c_id
    Set rs = Server.CreateObject ("ADODB.Recordset")
    rs.Open sql,conn,2,3

    filepath=rs("c_filepath")
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.DeleteFile(Server.mappath(filepath))
    Set fso = nothing

    rs.delete
    rs.close
    Set rs = Nothing
    conn.close
    set conn=nothing
    %>

    <%response.redirect("showit.asp")%>


    四,其它功能

    模板管理页面:

    不会每次都是打开数据库表进行增加或者修改模板代码吧,所以,管理代码的页面程序不能少了,自己捣鼓下应该很简单的。当然,之前管理员

    的登录认证程序就不在书中交代了:)还有,如果设计了多个模板,那么在发表信息的时候应添加模板选择单选框,同样在执行转换HTML时,

    SQL选择的不同m_id了。


      

         


    ©2008 Baidu
     

  • 相关阅读:
    开始学习编写用于 Windows SideShow 设备的小工具【转】
    Windows Mobile 6.5 Developer Tool Kit 下载
    Microsoft Security Essentials 微软免费杀毒软件下载
    SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (2)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (4)
    负载测试、压力测试和性能测试的异同
    Windows Server 2008 Vista Sidebar Gadget (侧边栏小工具) 入门开发实例
    Silverlight Tools 安装失败 解决办法
    SQL Server 2008 空间数据库 空间索引概念及创建(取自帮助)
  • 原文地址:https://www.cnblogs.com/tatsuya/p/1203451.html
Copyright © 2011-2022 走看看