ForWork.Net

欢迎参观ForWork.Net,快乐工作·快乐生活!你我的快乐生活:)

上一篇: 爱一个人不等于拥有 下一篇:结婚戒指为什么要戴在无名指的原因

 

提动易swCMS6.5网站提供了ASP生成HTML的功能仅限于以下页面的使用:
网站首页以及各频道首页,栏目页,专题页,内容页的静态页生成
至于公告页,投票结果页,友情链接页,用户中心页等页面均未提供生成静态页的功能
 
我们可以通过对其他页面生成静态页的技术分析的来学习这个知识点,
通过学习相信我们可以完善网站其他页面的静态页生成功能
 
所有生成静态页的操作都在后台进行
网站首页的静态页生成由后台页Admin_CreateSiteIndex.asp调用两个过程来完成
Call GetHTML_SiteIndex      '返回strHTML,即网站首页的html内容
Call WriteToFile(InstallDir & FileName_SiteIndex, strHTML)     ‘保存成静态页到指定的目录
 
过程GetHTML_SiteIndex()在《皮肤与代码分离技术的原理》已做过简单介绍,
位于后台页调用的<!--#include file="../Include/PowerEasy.SiteIndex.asp"-->文件中
 
过程WriteToFile()才是生成静态页的核心代码
位于后台页调用的<!--#include file="../Include/PowerEasy.FSO.asp"-->文件中
  用:写入相应的内容到指定的文件
  数:WriteToFileName ---- 写入文件的文件名
        WriteToFileContent ---- 写入文件的内容
该过程包含两个子函数如下:
Function WriteToFile_FSO(WriteToFileName, WriteToFileContent)    '以字符串的形式写入文件
Function WriteToFile_ADO(WriteToFileName, WriteToFileContent)   '以文件流的形式写入文件
由过程WriteToFile()根据文件内容的形式判断决定选择哪个自函数来完成文件的生成
由于是将模板的HTML内容保存成静态网页
所以选择的肯定由子函数WriteToFile_FSO()来完成静态页的生成
而子函数WriteToFile_ADO()则用于保存文章中包含的远程图片文件
因为远程图片是以文件流的形式复制到文章频道的上传目录中的
 
过程WriteToFile()及其子函数WriteToFile_FSO()的代码比较简单,如下所示:
 
Sub WriteToFile(WriteToFileName, WriteToFileContent)
    Dim ErrMsg
    ErrMsg = WriteToFile_FSO(WriteToFileName, WriteToFileContent)
    If ErrMsg <> "" Then
        ErrMsg = WriteToFile_ADO(WriteToFileName, WriteToFileContent)
        If ErrMsg <> "" Then
            Response.Write "<li>生成 " & WriteToFileName & " 时出错。出错原因:" & ErrMsg & "</li>"
        End If
    End If
End Sub
 
Function WriteToFile_FSO(WriteToFileName, WriteToFileContent)    '字符串的形式写入文件
    On Error Resume Next
    Err.Clear
    Dim hf
    Set hf = fso.OpenTextFile(Server.MapPath(WriteToFileName), 2, True)
    hf.Write WriteToFileContent
    hf.Close
    Set hf = Nothing
    If Err Then
        WriteToFile_FSO = Err.Description
        Err.Clear
    Else
        WriteToFile_FSO = ""
    End If
End Function
 
 
各频道页面:内容页,栏目页,专题页,频道首页共4种的静态页生成
在后台页Admin_CreateHTML.asp进行操作
以使用文章功能的频道为例,相关文件还包括:
Admin_CreateArticle.asp 其包含过程CreateArticle()
Admin_CreateCommon.asp 其包含各功能模块的频道栏目页,频道专题页,频道首页的过程
CreateClass() CreateSpecial() CreateIndex()
这三个过程方法由该功能模块的类的对象实例调用,例如这里是Article类的对象实例
:比如我添加了“科研天地”这个文章频道
首先,我们要确定该频道设置成要求生成HTML静态页,当然选“是”
其次,选择要求生成的静态页种类和生成方式,即自动还是手动生成,一般为自动
再次,设置栏目页和内容页生成静态页存放的路径,例如:list/list_ID.html 和html/ID.html
最后,设置静态页的命名方式,例如:ID.html
在后台“科研天地管理”的生成选项中设置好以上参数后
则文件Admin_CreateArticle.asp所调用的过程就根据以上设置的参数进行生成静态页的操作
 
'response.Write(Action) '测试从Admin_CreateHTML.asp的隐藏域Action传递的参数值
Select Case Action         '此参数从Admin_CreateHTML.asp的表单隐藏域获取
Case "CreateArticle"
    Call CreateArticle    '生成内容页
Case "CreateClass"
    Call CreateClass     '生成栏目页
Case "CreateSpecial"
    Call CreateSpecial   '生成专题页
Case "CreateIndex"
Call CreateIndex     '生成首页
Case "CreateArticle2"     '设置为自动生成的方式时创建以下静态页
    If AutoCreateType > 0 Then '若是自动生成方式,
        IsAutoCreate = True             '
        Call CreateArticle           '则创建文章内容页
        If ClassID > 0 Then             '若该文章属于某栏目,
            ClassID = ParentPath & "," & ClassID 'ParentPath为该栏目的父路径
            Call CreateClass     '则创建栏目页
        End If
        SpecialID = Trim(Request("SpecialID"))
        If SpecialID <> "" Then Call CreateSpecial
        '在生成首页前,要将栏目ID和专题ID置为0
        ClassID = 0
        arrChildID = 0
        SpecialID = 0
        Call CreateIndex            '生成频道首页
 
        Call CreateSiteIndex       '生成网站首页
        Call CreateSiteSpecial     '生成全站专题
End If
Case "CreateOther"                      '定时生成创建除文章其他页
       ‘程序代码省略
Case Else
    FoundErr = True
    ErrMsg = ErrMsg & "<li>参数错误!</li>"
End Select
 
了解了生成静态页的核心代码后,还有一个重要而值得考虑的问题
即 “静态链接还是ASP页链接的问题”
该问题在替换标签这一环节上,下面接着探讨:
 
生成静态页的过程中当获取模板内容后
在替换标签时就要对某些文字或图片内容的链接文件做一个判断
根据是否采用HTML生成方式来决定链接的是HTML静态页还是ASP页
我们以生成“科研天地”文章频道静态首页为例简述其过程:
1. 首先获取模板“2006海蓝文章频道首页模板”
2. “科研天地”频道首页Index.asp调用Article类的过程方法GetHTML_Index来获取HTML内容
Call PE_Content.GetHTML_Index
3. 在过程GetHTML_Index()中,
除了要替换一些普通标签外,还要调用以下方法对超级标签的替换
strTemp = GetListFromTemplate(strTemp)
strTemp = GetPicFromTemplate(strTemp)   
完成以列表形式显示文章标题等信息的超级函数式标签和
以图片形式显示文章的超级函数式标签的替换工作
4. 当替换例如“最新推荐”的文章列表标签
{$GetArticleList(ChannelID,0,True,0,True,10,False,False,"",0,3,2,30,0,True,1,True,False,3,False,False,False,True,True,False,0)}时,
就要对标题的链接文件做一个判断,
若文章内容页也采用了生成HTML的方式,
则链接的文件就是静态页(例如:html/9.html),
若否,则为ASP页(例如:ShowArticle.asp?ArticleID=9)
5. 因此当由GetListFromTemplate(strTemp)获取模板内容后,
再由GetListFromLabel()将标签中的相关参数传递到GetArticleList()
最终由GetArticleList()调用的子函数GetArticleUrl()和GetClassUrl()实现对文章    标题和文章栏目名的链接文件进行决定
 
两函数GetArticleUrl()和GetClassUrl()的代码虽然简短但很重要
两函数功能相似,但却位于不同的文件中
 
函数GetArticleUrl()位于PowerEasy.Common.Content.asp中:
'根据是否生成HTML来判断文章列表中标题的链接为静态页还是ASP页
Function GetArticleUrl(ByVal tParentDir, ByVal tClassDir, ByVal tUpdateTime, ByVal tArticleID, ByVal tClassPurview, ByVal tInfoPurview, ByVal tInfoPoint)
    If IsNull(tParentDir) Then tParentDir = ""
    If IsNull(tClassDir) Then tClassDir = ""
    If IsNull(tClassPurview) Then tClassPurview = 0
    If IsNull(tInfoPurview) Then tInfoPurview = 0
   
    If UseCreateHTML > 0 And tClassPurview = 0 And tInfoPoint = 0 And tInfoPurview = 0 Then
        GetArticleUrl = ChannelUrl & GetItemPath(StructureType, tParentDir, tClassDir, tUpdateTime) & GetItemFileName(FileNameType, ChannelDir, tUpdateTime, tArticleID) & FileExt_Item
    Else
        GetArticleUrl = ChannelUrl_ASPFile & "/ShowArticle.asp?ArticleID=" & tArticleID
    End If
End Function
 
函数GetClassUrl()位于PowerEasy.Common.Front.asp中:
'根据是否生成HTML来判断文章列表中栏目名的链接为静态页还是ASP页
'备注:在Admin_ClassUrl.asp中也有一个代码完全相同的GetClassUrl()函数
Function GetClassUrl(sParentDir, sClassDir, iClassID, iClassPurview)
    Dim strClassUrl
    If (UseCreateHTML = 1 Or UseCreateHTML = 3) And iClassPurview < 2 Then
        strClassUrl = ChannelUrl & GetListPath(StructureType, ListFileType, sParentDir, sClassDir) & GetListFileName(ListFileType, iClassID, 1, 1) & FileExt_List
    Else
        strClassUrl = ChannelUrl_ASPFile & "/ShowClass.asp?ClassID=" & iClassID
    End If
    GetClassUrl = strClassUrl
End Function
 
 
总结:
网站生成静态页的技术应用很普遍,
我们要想很好地掌握该技术就必须对现有的代码的细节进行深入研究。
对代码中包含的动易标签的作用不清楚的时候

点击这里获取该日志的TrackBack引用地址

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于本文

您正在阅读的是:动易swCMS6.5网站由ASP生成HTML静态页的技术分析
Person01 发表于:2008-3-31 12:46:41
分类:技术文摘
关键词:动易  swCMS6.5  网站  asp  生成  html  静态页  技术分析  

最近发表

最新评论及回复

最近留言

友情链接

控制面板

Search

网站分类

文章归档

图标汇集

订阅ForWork.Net

什么是RSS订阅?查看解释
订阅到您的在线阅读器

抓虾 google reader my yahoo bloglines 鲜果 哪吒

博客作者

Person01

Copyright 2006-2008 ForWork.Net 【快乐工作·快乐生活】 Rights Reserved.  苏ICP备05070716号

Powered By Z-Blog 1.8 Walle Build 100427 Code detection by Codefense 网络支持 网服数据