<% '/////////////////////////////////////////////////////////////////////////////// '// Z-Blog '// 作 者: 朱煊(zx.asd) '// 版权所有: RainbowSoft Studio '// 技术支持: rainbowsoft@163.com '// 程序名称: '// 程序版本: '// 单元名称: c_system_base.asp '// 开始时间: 2005.02.11 '// 最后修改: '// 备 注: '/////////////////////////////////////////////////////////////////////////////// '定义全局变量 Dim objConn Dim BlogTitle Dim BlogUser Dim BlogPath BlogPath=Server.MapPath("c_system_base.asp") BlogPath=Left(BlogPath,Len(BlogPath)-Len("c_system_base.asp")) Dim StarTime Dim EndTime StarTime = Timer() Dim Categorys() Dim Users() Dim Tags() Dim KeyWords Dim PluginName() Dim PluginActiveFunction() ReDim PluginName(0) ReDim PluginActiveFunction(0) Dim TemplateTagsName Dim TemplateTagsValue Dim TemplatesName Dim TemplatesContent '********************************************************* ' 目的: System 初始化 '********************************************************* Sub System_Initialize() On Error Resume Next Call ActivePlugin() 'plugin node For Each sAction_Plugin_System_Initialize in Action_Plugin_System_Initialize If Not IsEmpty(sAction_Plugin_System_Initialize) Then Call Execute(sAction_Plugin_System_Initialize) If bAction_Plugin_System_Initialize=True Then Exit Sub Next If OpenConnect()=False Then If Err.Number<>0 Then Err.Clear Call ShowError(4) End If Set BlogUser =New TUser BlogUser.Verify() Call GetCategory() Call GetUser() Call GetTags() Call GetKeyWords() Call LoadGlobeCache() Dim bolRebuildIndex Application.Lock bolRebuildIndex=Application(ZC_BLOG_CLSID & "SIGNAL_REBUILDINDEX") Application.UnLock If IsEmpty(bolRebuildIndex)=False Then If bolRebuildIndex=True Then Call MakeBlogReBuild_Core() End If End If Dim strTemplateModified Application.Lock strTemplateModified=Application(ZC_BLOG_CLSID & "TEMPLATEMODIFIED") Application.UnLock If IsEmpty(strTemplateModified)=False Then If LCase(CStr(strTemplateModified))<>LCase(CStr(CheckTemplateModified)) Then Call ClearGlobeCache() Call LoadGlobeCache() End If End If 'plugin node For Each sAction_Plugin_System_Initialize_Succeed in Action_Plugin_System_Initialize_Succeed If Not IsEmpty(sAction_Plugin_System_Initialize_Succeed) Then Call Execute(sAction_Plugin_System_Initialize_Succeed) If bAction_Plugin_System_Initialize_Succeed=True Then Exit Sub Next 'If Err.Number<>0 Then Call ShowError(10) Err.Clear End Sub '********************************************************* '********************************************************* ' 目的: System 释放 '********************************************************* Sub System_Terminate() 'plugin node For Each sAction_Plugin_System_Terminate in Action_Plugin_System_Terminate If Not IsEmpty(sAction_Plugin_System_Terminate) Then Call Execute(sAction_Plugin_System_Terminate) If bAction_Plugin_System_Terminate=True Then Exit Sub Next Call CloseConnect() End Sub '********************************************************* '********************************************************* ' 目的: System 初始化 WithOutDB '********************************************************* Sub System_Initialize_WithOutDB() On Error Resume Next Call ActivePlugin() 'plugin node For Each sAction_Plugin_System_Initialize_WithOutDB in Action_Plugin_System_Initialize_WithOutDB If Not IsEmpty(sAction_Plugin_System_Initialize_WithOutDB) Then Call Execute(sAction_Plugin_System_Initialize_WithOutDB) If bAction_Plugin_System_Initialize_WithOutDB=True Then Exit Sub Next Call LoadGlobeCache() Dim strTemplateModified Application.Lock strTemplateModified=Application(ZC_BLOG_CLSID & "TEMPLATEMODIFIED") Application.UnLock If IsEmpty(strTemplateModified)=False Then If LCase(CStr(strTemplateModified))<>LCase(CStr(CheckTemplateModified)) Then Call ClearGlobeCache() Call LoadGlobeCache() End If End If 'plugin node For Each sAction_Plugin_System_Initialize_WithOutDB_Succeed in Action_Plugin_System_Initialize_WithOutDB_Succeed If Not IsEmpty(sAction_Plugin_System_Initialize_WithOutDB_Succeed) Then Call Execute(sAction_Plugin_System_Initialize_WithOutDB_Succeed) If bAction_Plugin_System_Initialize_WithOutDB_Succeed=True Then Exit Sub Next Err.Clear End Sub '********************************************************* '********************************************************* ' 目的: System 释放 WithOutDB '********************************************************* Sub System_Terminate_WithOutDB() 'plugin node For Each sAction_Plugin_System_Terminate_WithOutDB in Action_Plugin_System_Terminate_WithOutDB If Not IsEmpty(sAction_Plugin_System_Terminate_WithOutDB) Then Call Execute(sAction_Plugin_System_Terminate_WithOutDB) If bAction_Plugin_System_Terminate_WithOutDB=True Then Exit Sub Next End Sub '********************************************************* '********************************************************* ' 目的: 数据库连接 '********************************************************* Function OpenConnect() GetReallyDirectory() '判定是否为子目录调用 Dim strDbPath strDbPath=BlogPath & ZC_DATABASE_PATH Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDbPath OpenConnect=True End Function '********************************************************* '********************************************************* ' 目的: DB Disable Connect '********************************************************* Function CloseConnect() objConn.Close Set objConn=Nothing CloseConnect=True End Function '********************************************************* '********************************************************* ' 目的: 时间计长 '********************************************************* Function RunTime() EndTime=Timer() RunTime = CLng(FormatNumber((EndTime-StarTime)*1000,3)) End Function '********************************************************* '********************************************************* ' 目的: 分类读取 '********************************************************* Function GetCategory() Dim i,j,k,l Dim aryAllData Dim arySingleData() Erase Categorys Dim objRS Set objRS=objConn.Execute("SELECT TOP 1 [cate_ID] FROM [blog_Category] ORDER BY [cate_ID] DESC") If (Not objRS.bof) And (Not objRS.eof) Then i=objRS("cate_ID") ReDim Categorys(i) End If objRS.Close Set objRS=Nothing Set objRS=objConn.Execute("SELECT [cate_ID],[cate_Name],[cate_Intro],[cate_Order],[cate_Count] FROM [blog_Category] ORDER BY [cate_ID] ASC") If (Not objRS.bof) And (Not objRS.eof) Then aryAllData=objRS.GetRows(objRS.RecordCount) objRS.Close Set objRS=Nothing k=UBound(aryAllData,1) l=UBound(aryAllData,2) For i=0 To l Set Categorys(aryAllData(0,i))=New TCategory Categorys(aryAllData(0,i)).LoadInfoByArray(Array(aryAllData(0,i),aryAllData(1,i),aryAllData(2,i),aryAllData(3,i),aryAllData(4,i))) Next End If GetCategory=True End Function '********************************************************* '********************************************************* ' 目的: 用户读取 '********************************************************* Function GetUser() Dim i,j,k,l Dim aryAllData Dim arySingleData() Erase Users Dim objRS Set objRS=objConn.Execute("SELECT TOP 1 [mem_ID] FROM [blog_Member] ORDER BY [mem_ID] DESC") If (Not objRS.bof) And (Not objRS.eof) Then i=objRS("mem_ID") ReDim Users(i) End If objRS.Close Set objRS=Nothing Set objRS=objConn.Execute("SELECT [mem_ID],[mem_Name],[mem_Level],[mem_Password],[mem_Email],[mem_HomePage],[mem_PostLogs],[mem_Intro] FROM [blog_Member] ORDER BY [mem_ID] ASC") If (Not objRS.bof) And (Not objRS.eof) Then aryAllData=objRS.GetRows(objRS.RecordCount) objRS.Close Set objRS=Nothing k=UBound(aryAllData,1) l=UBound(aryAllData,2) For i=0 To l Set Users(aryAllData(0,i))=New TUser Users(aryAllData(0,i)).LoadInfoByArray(Array(aryAllData(0,i),aryAllData(1,i),aryAllData(2,i),aryAllData(3,i),aryAllData(4,i),aryAllData(5,i),aryAllData(6,i),aryAllData(7,i))) Next End If Getuser=True End Function '********************************************************* '********************************************************* ' 目的: Tags读取 '********************************************************* Function GetTags() Dim i,j,k,l Dim aryAllData Dim arySingleData() Erase Tags Dim objRS Set objRS=objConn.Execute("SELECT TOP 1 [tag_ID] FROM [blog_Tag] ORDER BY [tag_ID] DESC") If (Not objRS.bof) And (Not objRS.eof) Then i=objRS("tag_ID") ReDim Tags(i) End If Set objRS=objConn.Execute("SELECT [tag_ID],[tag_Name],[tag_Intro],[tag_Order],[tag_Count] FROM [blog_Tag] ORDER BY [tag_ID] ASC") If (Not objRS.bof) And (Not objRS.eof) Then aryAllData=objRS.GetRows(objRS.RecordCount) objRS.Close Set objRS=Nothing k=UBound(aryAllData,1) l=UBound(aryAllData,2) For i=0 To l Set Tags(aryAllData(0,i))=New TTag Tags(aryAllData(0,i)).LoadInfoByArray(Array(aryAllData(0,i),aryAllData(1,i),aryAllData(2,i),aryAllData(3,i),aryAllData(4,i))) Next End If GetTags=True End Function '********************************************************* '********************************************************* ' 目的: KeyWords读取 '********************************************************* Function GetKeyWords() 'Dim objRS 'Set objRS=objConn.Execute("SELECT [key_ID],[key_Name],[key_URL] FROM [blog_Keyword] ORDER BY [key_ID] ASC") 'If (Not objRS.bof) And (Not objRS.eof) Then ' KeyWords=objRS.GetRows 'End If 'objRS.Close 'Set objRS=Nothing GetKeyWords=True End Function '********************************************************* '********************************************************* ' 目的: 读取权限 ' 备注: 权限最高为1 最低为5 不是则非法 ' "Root"一定只能为1 ' 权限配置方式可以变通 '********************************************************* Function GetRights(strAction) 'plugin node For Each sAction_Plugin_GetRights_Begin in Action_Plugin_GetRights_Begin If Not IsEmpty(sAction_Plugin_GetRights_Begin) Then Call Execute(sAction_Plugin_GetRights_Begin) If bAction_Plugin_GetRights_Begin=True Then Exit Function Next Select Case strAction Case "Root" GetRights=1 Case "login" GetRights=5 Case "verify" GetRights=5 Case "logout" GetRights=5 Case "admin" GetRights=4 Case "cmt","CommentRev" GetRights=5 Case "tb" GetRights=5 Case "vrs" GetRights=5 Case "rss" GetRights=5 Case "gettburl" GetRights=5 Case "ArticleMng" GetRights=3 Case "ArticleEdt" GetRights=3 Case "ArticlePst" GetRights=3 Case "ArticleDel" GetRights=3 Case "ArticleBud" GetRights=3 Case "CategoryMng" GetRights=2 Case "CategoryEdt" GetRights=2 Case "CategoryPst" GetRights=2 Case "CategoryDel" GetRights=2 Case "TagMng" GetRights=1 Case "TagEdt" GetRights=1 Case "TagPst" GetRights=1 Case "TagDel" GetRights=1 'Case "KeyWordMng" ' GetRights=1 'Case "KeyWordEdt" ' GetRights=1 'Case "KeyWordPst" ' GetRights=1 'Case "KeyWordDel" ' GetRights=1 Case "GuestBookMng" GetRights=2 Case "CommentMng" GetRights=4 Case "CommentDel" GetRights=4 Case "CommentEdt" GetRights=4 Case "CommentSav" GetRights=4 Case "CommentDelBatch" GetRights=4 Case "TrackBackMng" GetRights=3 Case "TrackBackDel" GetRights=3 Case "TrackBackDelBatch" GetRights=3 Case "TrackBackSnd" GetRights=3 Case "UserMng" GetRights=4 Case "UserEdt" GetRights=4 Case "UserDel" GetRights=1 Case "UserCrt" GetRights=1 Case "BlogReBuild" GetRights=3 Case "DirectoryReBuild" GetRights=3 Case "FileReBuild" GetRights=1 Case "AskFileReBuild" GetRights=1 Case "FileMng" GetRights=2 Case "FileSnd" GetRights=2 Case "FileUpload" GetRights=2 Case "FileDel" GetRights=2 Case "FileDelBatch" GetRights=2 Case "Search" GetRights=5 'Case "BlogMng" ' GetRights=4 Case "SettingMng" GetRights=1 Case "SettingSav" GetRights=1 Case "PlugInMng" GetRights=4 Case "SiteInfo" GetRights=4 Case "SiteFileMng" GetRights=1 Case "SiteFileEdt" GetRights=1 'Case "SiteFileFnd" ' GetRights=1 Case "SiteFilePst" GetRights=1 Case "SiteFileDel" GetRights=1 'Case "Update" ' GetRights=1 Case "ThemesMng" GetRights=1 Case "ThemesSav" GetRights=1 Case "LinkMng" GetRights=1 Case "LinkSav" GetRights=1 Case "PlugInActive" GetRights=1 Case "PlugInDisable" GetRights=1 Case Else Call ShowError(1) End Select End Function '********************************************************* '********************************************************* ' 目的: 检查权限 '********************************************************* Function CheckRights(strAction) 'plugin node For Each sAction_Plugin_CheckRights_Begin in Action_Plugin_CheckRights_Begin If Not IsEmpty(sAction_Plugin_CheckRights_Begin) Then Call Execute(sAction_Plugin_CheckRights_Begin) If bAction_Plugin_CheckRights_Begin=True Then Exit Function Next If BlogUser.Level>GetRights(strAction) Then CheckRights=False Else CheckRights=True End If End Function '********************************************************* '********************************************************* ' 目的: Make Calendar '********************************************************* Function MakeCalendar(dtmYearMonth) 'plugin node For Each sAction_Plugin_MakeCalendar_Begin in Action_Plugin_MakeCalendar_Begin If Not IsEmpty(sAction_Plugin_MakeCalendar_Begin) Then Call Execute(sAction_Plugin_MakeCalendar_Begin) If bAction_Plugin_MakeCalendar_Begin=True Then Exit Function Next Dim strCalendar Dim y Dim m Dim d Dim firw Dim lasw Dim ny Dim nm Dim i Dim j Dim k Dim b Dim s Dim t Call CheckParameter(dtmYearMonth,"dtm",Date()) y=year(dtmYearMonth) m=month(dtmYearMonth) ny=y nm=m+1 If m=12 Then ny=ny+1:nm=1 firw=Weekday(Cdate(y&"-"&m&"-1")) For i=28 to 32 If IsDate(y&"-"&m&"-"&i) Then lasw=Weekday(Cdate(y&"-"&m&"-"&i)) Else Exit For End If Next d=i-1 k=1 If firw>5 Then b=42 Else b=35 If (d=28) And (firw=1) Then b=28 If (firw>5) And (d<31) And (d-firw<>23) Then b=35 '////////////////////////////////////////////////////////// ' 逻辑处理 Dim aryDateLink(32) Dim aryDateID(32) Dim aryDateArticle(32) Dim objRS Set objRS=Server.CreateObject("ADODB.Recordset") objRS.CursorType = adOpenKeyset objRS.LockType = adLockReadOnly objRS.ActiveConnection=objConn objRS.Source="" objRS.Open("select [log_ID],[log_CateID],[log_AuthorID],[log_Level],[log_PostTime],[log_Url],[log_Istop] from [blog_Article] where ([log_Level]>2) And ([log_PostTime] BETWEEN #"&y&"-"&m&"-1# AND #"&ny&"-"&nm&"-1#)") If (Not objRS.bof) And (Not objRS.eof) Then For i=1 To objRS.RecordCount j=CInt(Day(CDate(objRS("log_PostTime")))) aryDateLink(j)=True aryDateID(j)=objRS("log_ID") Set aryDateArticle(j)=New TArticle aryDateArticle(j).LoadInfobyArray Array(objRS("log_ID"),"",objRS("log_CateID"),"","","",objRS("log_Level"),objRS("log_AuthorID"),objRS("log_PostTime"),"","","",objRS("log_Url"),"") objRS.MoveNext If objRS.eof Then Exit For Next End If objRS.Close Set objRS=Nothing '////////////////////////////////////////////////////////// s="catalog.asp?date="&y&"-"&(m-1) t="catalog.asp?date="&y&"-"&(m+1) If m=1 Then s="catalog.asp?date="&(y-1)&"-12" If m=12 Then t="catalog.asp?date="&(y+1)&"-1" strCalendar=strCalendar & "
" strCalendar=strCalendar & "

<< "&y&"-"&m&" >>

" strCalendar=strCalendar & "

"&ZVA_Week_Abbr(1)&"

"&ZVA_Week_Abbr(2)&"

"&ZVA_Week_Abbr(3)&"

"&ZVA_Week_Abbr(4)&"

"&ZVA_Week_Abbr(5)&"

"&ZVA_Week_Abbr(6)&"

"&ZVA_Week_Abbr(7)&"

" j=0 For i=1 to b If (j=>firw-1) and (k="&(k)&"

" Else strCalendar=strCalendar & "

"&(k)&"

" End If k=k+1 Else strCalendar=strCalendar & "

" End If j=j+1 Next strCalendar=strCalendar & "
" MakeCalendar=strCalendar End Function '********************************************************* '********************************************************* ' 目的: 加载指定目录的文件列表 '********************************************************* Function LoadIncludeFiles(strDir) On Error Resume Next Dim aryFileList() ReDim aryFileList(0) Dim fso, f, f1, fc, s, i Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(BlogPath & strDir) Set fc = f.Files i=0 For Each f1 in fc i=i+1 ReDim Preserve aryFileList(i) aryFileList(i)=f1.name Next LoadIncludeFiles=aryFileList Set fso=nothing Err.Clear End Function '********************************************************* '********************************************************* ' 目的: Get Template by Name '********************************************************* Function GetTemplate(Name) Dim i,j j=UBound(TemplatesName) For i=1 to j If LCase(TemplatesName(i))=LCase(Name) Then GetTemplate=TemplatesContent(i) End If Next End Function '********************************************************* '********************************************************* ' 目的: Set Template by Name '********************************************************* Function SetTemplate(Name,Value) Dim i,j j=UBound(TemplatesName) For i=1 to j If LCase(TemplatesName(i))=LCase(Name) Then TemplatesContent(i)=Value End If Next End Function '********************************************************* '********************************************************* ' 目的: Check Template Modified Date '********************************************************* Function CheckTemplateModified() Dim fso, f, f1, fc, s Dim d,nd Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(BlogPath & "themes" & "/" & ZC_BLOG_THEME & "/" & ZC_TEMPLATE_DIRECTORY) Set fc = f.Files For Each f1 in fc d=f1.DateLastModified If nd="" Then nd=d If DateDiff("s",nd,d)>0 Then nd=d Next CheckTemplateModified=nd End Function '********************************************************* '********************************************************* ' 目的: Load 全局 Cache '********************************************************* Function LoadGlobeCache() On Error Resume Next Dim bolReLoadCache Application.Lock bolReLoadCache=Application(ZC_BLOG_CLSID & "SIGNAL_RELOADCACHE") Application.UnLock If IsEmpty(bolReLoadCache)=True Then bolReLoadCache="ok" Else Application.Lock TemplateTagsName=Application(ZC_BLOG_CLSID & "TemplateTagsName") TemplateTagsValue=Application(ZC_BLOG_CLSID & "TemplateTagsValue") TemplatesName=Application(ZC_BLOG_CLSID & "TemplatesName") TemplatesContent=Application(ZC_BLOG_CLSID & "TemplatesContent") Application.UnLock If IsEmpty(TemplateTagsValue)=False And IsEmpty(TemplateTagsValue)=False And IsEmpty(TemplatesName)=False And IsEmpty(TemplatesContent)=False Then Exit Function End If End If Call GetReallyDirectory Dim i,j '加载模板 Dim objStream Dim strContent Dim aryTemplatesName() Dim aryTemplatesContent() ReDim Preserve aryTemplatesName(3) ReDim Preserve aryTemplatesContent(3) '加载WAP Application.Lock aryTemplatesName(1)="TEMPLATE_WAP_ARTICLE_COMMENT" aryTemplatesName(2)="TEMPLATE_WAP_ARTICLE-MULTI" aryTemplatesName(3)="TEMPLATE_WAP_SINGLE" aryTemplatesContent(1)=LoadFromFile(BlogPath & "WAP/wap_article_comment.html","utf-8") aryTemplatesContent(2)=LoadFromFile(BlogPath & "WAP/wap_article-multi.html","utf-8") aryTemplatesContent(3)=LoadFromFile(BlogPath & "WAP/wap_single.html","utf-8") Application(ZC_BLOG_CLSID & "TEMPLATE_WAP_ARTICLE_COMMENT")=aryTemplatesContent(1) Application(ZC_BLOG_CLSID & "TEMPLATE_WAP_ARTICLE-MULTI")=aryTemplatesContent(2) Application(ZC_BLOG_CLSID & "TEMPLATE_WAP_SINGLE")=aryTemplatesContent(3) Application.UnLock '读取Template目录下的所有文件并写入Cache Dim aryFileList Dim aryFileNameTemplate() Dim aryFileNameTemplate_Variable() aryFileList=LoadIncludeFiles("themes" & "/" & ZC_BLOG_THEME & "/" & ZC_TEMPLATE_DIRECTORY) If IsArray(aryFileList) Then j=UBound(aryFileList) ReDim aryFileNameTemplate(j) ReDim aryFileNameTemplate_Variable(j) ReDim Preserve aryTemplatesName(3+j) ReDim Preserve aryTemplatesContent(3+j) For i=1 to j aryFileNameTemplate(i)="themes" & "/" & ZC_BLOG_THEME & "/" & ZC_TEMPLATE_DIRECTORY & "/" & aryFileList(i) aryFileNameTemplate_Variable(i)="TEMPLATE_" & UCase(Left(aryFileList(i),InStr(aryFileList(i),".")-1)) If InStr(aryFileList(i),".")=0 Then aryFileNameTemplate_Variable(i)="TEMPLATE_" & UCase(aryFileList(i)) End If aryTemplatesName(3+i)=aryFileNameTemplate_Variable(i) strContent="" strContent=LoadFromFile(BlogPath & "" & aryFileNameTemplate(i),"utf-8") Application.Lock Application(ZC_BLOG_CLSID & aryFileNameTemplate_Variable(i))=strContent Application.UnLock aryTemplatesContent(3+i)=strContent Next End If '加载标签 Dim a,b,c,d,e Dim t() Dim s() a=0 b=20 c=1 d=320 e=0 '读取TEMPLATE下的Include目录下的所有文件并写入Cache 'Dim aryFileList Dim aryFileNameTemplateInclude() Dim aryFileNameTemplateInclude_Variable() aryFileList=LoadIncludeFiles("themes" & "/" & ZC_BLOG_THEME & "/" & "INCLUDE") If IsArray(aryFileList) Then e=UBound(aryFileList) ReDim aryFileNameTemplateInclude(e) ReDim aryFileNameTemplateInclude_Variable(e) ReDim s(e) ReDim Preserve aryTemplateTagsName(e) ReDim Preserve aryTemplateTagsValue(e) For i=1 to e aryFileNameTemplateInclude(i)="themes" & "/" & ZC_BLOG_THEME & "/" & "INCLUDE" & "/" & aryFileList(i) aryFileNameTemplateInclude_Variable(i)="TEMPLATE_INCLUDE_" & UCase(Left(aryFileList(i),InStr(aryFileList(i),".")-1)) If InStr(aryFileList(i),".")=0 Then aryFileNameTemplateInclude_Variable(i)="TEMPLATE_INCLUDE_" & UCase(aryFileList(i)) End If s(i)=aryFileNameTemplateInclude_Variable(i) strContent="" strContent=LoadFromFile(BlogPath & "" & aryFileNameTemplateInclude(i),"utf-8") strContent=Replace(strContent,"<"&"%=ZC_BLOG_HOST%"&">",ZC_BLOG_HOST) aryTemplateTagsName(i)=s(i) aryTemplateTagsValue(i)=strContent Next End If '读取Include目录下的所有文件并写入Cache 'Dim aryFileList Dim aryFileNameInclude() Dim aryFileNameInclude_Variable() aryFileList=LoadIncludeFiles("INCLUDE") If IsArray(aryFileList) Then a=UBound(aryFileList) ReDim aryFileNameInclude(a) ReDim aryFileNameInclude_Variable(a) ReDim s(a) ReDim Preserve aryTemplateTagsName(e+a) ReDim Preserve aryTemplateTagsValue(e+a) For i=1 to a aryFileNameInclude(i)="/INCLUDE/" & aryFileList(i) aryFileNameInclude_Variable(i)="CACHE_INCLUDE_" & UCase(Left(aryFileList(i),InStr(aryFileList(i),".")-1)) If InStr(aryFileList(i),".")=0 Then aryFileNameInclude_Variable(i)="CACHE_INCLUDE_" & UCase(aryFileList(i)) End If s(i)=aryFileNameInclude_Variable(i) strContent="" strContent=LoadFromFile(BlogPath & "" & aryFileNameInclude(i),"utf-8") strContent=Replace(strContent,"<"&"%=ZC_BLOG_HOST%"&">",ZC_BLOG_HOST) aryTemplateTagsName(e+i)=s(i) aryTemplateTagsValue(e+i)=strContent Next End If ReDim Preserve aryTemplateTagsName(a+e+d) ReDim Preserve aryTemplateTagsValue(a+e+d) For j=1 to d i=Right("000" & CStr(j),3) aryTemplateTagsName(a+e+j)="ZC_MSG" & i Call Execute("aryTemplateTagsValue(a+e+j)=ZC_MSG" & i) Next ReDim t(b) t(1)="ZC_BLOG_VERSION" t(2)="ZC_BLOG_LANGUAGE" t(3)="ZC_BLOG_HOST" t(4)="ZC_BLOG_TITLE" t(5)="ZC_BLOG_SUBTITLE" t(6)="ZC_BLOG_NAME" t(7)="ZC_BLOG_SUB_NAME" t(8)="ZC_BLOG_CSS" t(9)="ZC_BLOG_COPYRIGHT" t(10)="ZC_BLOG_MASTER" t(11)="ZC_CONTENT_MAX" t(12)="ZC_EMOTICONS_FILENAME" t(13)="ZC_EMOTICONS_FILESIZE" t(14)="ZC_GUESTBOOK_CONTENT" t(15)="ZC_BLOG_CLSID" t(16)="ZC_TIME_ZONE" t(17)="ZC_IMAGE_WIDTH" t(18)="ZC_BLOG_THEME" t(19)="ZC_VERIFYCODE_WIDTH" t(20)="ZC_VERIFYCODE_HEIGHT" ReDim Preserve aryTemplateTagsName(a+e+d+b) ReDim Preserve aryTemplateTagsValue(a+e+d+b) For j=1 to b aryTemplateTagsName(a+e+d+j)=t(j) Call Execute("aryTemplateTagsValue(a+e+d+j)="& t(j)) Next ReDim Preserve aryTemplateTagsName(a+e+d+b+c) ReDim Preserve aryTemplateTagsValue(a+e+d+b+c) aryTemplateTagsName(a+e+d+b+c)="BLOG_CREATE_TIME" aryTemplateTagsValue(a+e+d+b+c)=GetTime(Now()) Application.Lock Application(ZC_BLOG_CLSID & "TemplateTagsName")=aryTemplateTagsName Application(ZC_BLOG_CLSID & "TemplateTagsValue")=aryTemplateTagsValue Application(ZC_BLOG_CLSID & "TemplatesName")=aryTemplatesName Application(ZC_BLOG_CLSID & "TemplatesContent")=aryTemplatesContent Application.UnLock TemplateTagsName=aryTemplateTagsName TemplateTagsValue=aryTemplateTagsValue TemplatesName=aryTemplatesName TemplatesContent=aryTemplatesContent Err.Clear Application.Lock Application(ZC_BLOG_CLSID & "TEMPLATEMODIFIED")=CheckTemplateModified() Application.UnLock Application.Lock Application(ZC_BLOG_CLSID & "SIGNAL_RELOADCACHE")=bolReLoadCache Application.UnLock LoadGlobeCache=True End Function '********************************************************* '********************************************************* ' 目的: Clear Cache '********************************************************* Function ClearGlobeCache() Application.Lock Application(ZC_BLOG_CLSID & "CACHE_ARTICLE_VIEWCOUNT")=Empty Application(ZC_BLOG_CLSID & "TemplateTagsName")=Empty Application(ZC_BLOG_CLSID & "TemplateTagsValue")=Empty Application(ZC_BLOG_CLSID & "TemplatesName")=Empty Application(ZC_BLOG_CLSID & "TemplatesContent")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE_COMMENT")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE_COMMENTPOST")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE_COMMENTPOST-VERIFY")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE_TAG")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE_TRACKBACK")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE-MULTI")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE-SINGLE")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE-GUESTBOOK")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_PAGEBAR")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE_NVABAR_L")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE_NVABAR_R")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE_MUTUALITY")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_B_ARTICLE-ISTOP")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_CATALOG")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_DEFAULT")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_SEARCH")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_SINGLE")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_TAGS")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_WAP_ARTICLE_COMMENT")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_WAP_ARTICLE-MULTI")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_WAP_SINGLE")=Empty Application(ZC_BLOG_CLSID & "TEMPLATE_GUESTBOOK")=Empty Application(ZC_BLOG_CLSID & "SIGNAL_RELOADCACHE")=Empty Application(ZC_BLOG_CLSID & "TEMPLATEMODIFIED")=Empty Application.UnLock ClearGlobeCache=True End Function '********************************************************* '********************************************************* ' 目的: Parse Tag 并格式化 '********************************************************* Function ParseTag(strTag) Dim s Dim t Dim i Dim Tag Dim b Dim objTag strTag=Trim(strTag) strTag=Replace(strTag,",",vbCrlf) strTag=Replace(strTag,",",vbCrlf) strTag=TransferHTML(strTag,"[normalname]") strTag=Replace(strTag,vbCrlf,",") t=Split(strTag,",") For i=LBound(t) To UBound(t) t(i)=Trim(t(i)) Next GetTags() For i=LBound(t) To UBound(t) b=False For Each Tag in Tags If IsObject(Tag) Then If UCase(Tag.Name)=UCase(t(i)) Then b=True End If End If Next If b=False Then Set objTag=New TTag objTag.ID=0 objTag.Name=t(i) objTag.Order=0 objTag.Intro="" objTag.Post Set objTag=Nothing End If Next GetTags() For i=LBound(t) To UBound(t) For Each Tag in Tags If IsObject(Tag) Then If UCase(Tag.Name)=UCase(t(i)) Then t(i)="{"&Tag.ID&"}" End If End If Next Next s=Join(t) s=Replace(s," ","") ParseTag=s End Function '********************************************************* '********************************************************* ' 目的: 得到实际上的真实目录 '********************************************************* Function GetReallyDirectory() On Error Resume Next Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(BlogPath & "\" & ZC_DATABASE_PATH) Then BlogPath=BlogPath ElseIf fso.FileExists(BlogPath & "\..\" & ZC_DATABASE_PATH) Then BlogPath=BlogPath & "..\" ElseIf fso.FileExists(BlogPath & "\..\..\" & ZC_DATABASE_PATH) Then BlogPath=BlogPath & "..\..\" ElseIf fso.FileExists(BlogPath & "\..\..\..\" & ZC_DATABASE_PATH) Then BlogPath=BlogPath & "..\..\..\" ElseIf fso.FileExists(BlogPath & "\..\..\..\..\" & ZC_DATABASE_PATH) Then BlogPath=BlogPath & "..\..\..\..\" ElseIf fso.FileExists(BlogPath & "\..\..\..\..\..\" & ZC_DATABASE_PATH) Then BlogPath=BlogPath & "..\..\..\..\..\" End If Set fso=Nothing GetReallyDirectory=True Err.Clear End Function '********************************************************* '********************************************************* ' 目的: 设置提示标志 '********************************************************* Function SetBlogHint(bolOperateSuccess,bolRebuildIndex,bolRebuildFiles) Call SetBlogHintWithCLSID(bolOperateSuccess,bolRebuildIndex,bolRebuildFiles,ZC_BLOG_CLSID) End Function '********************************************************* '********************************************************* ' 目的: 设置提示自定义标志 '********************************************************* Function SetBlogHint_Custom(strInfo) Application.Lock Application(ZC_BLOG_CLSID & "SIGNAL_OPERATEINFO")=Application(ZC_BLOG_CLSID & "SIGNAL_OPERATEINFO") & vbCrlf & strInfo Application.UnLock End Function '********************************************************* '********************************************************* ' 目的: 设置提示标志withCLSID '********************************************************* Function SetBlogHintWithCLSID(bolOperateSuccess,bolRebuildIndex,bolRebuildFiles,newCLSID) Application.Lock Application(newCLSID & "SIGNAL_OPERATESUCCESS")=bolOperateSuccess If IsEmpty(bolRebuildIndex)=False Then Application(newCLSID & "SIGNAL_REBUILDINDEX")=bolRebuildIndex End If If IsEmpty(bolRebuildFiles)=False Then Application(newCLSID & "SIGNAL_REBUILDFILES")=bolRebuildFiles End If Application.UnLock End Function '********************************************************* '********************************************************* ' 目的: 输出提示 '********************************************************* Function GetBlogHint() Dim bolOperateSuccess,bolRebuildIndex,bolRebuildFiles,strOperateInfo Application.Lock bolOperateSuccess=Application(ZC_BLOG_CLSID & "SIGNAL_OPERATESUCCESS") bolRebuildIndex=Application(ZC_BLOG_CLSID & "SIGNAL_REBUILDINDEX") bolRebuildFiles=Application(ZC_BLOG_CLSID & "SIGNAL_REBUILDFILES") strOperateInfo=Application(ZC_BLOG_CLSID & "SIGNAL_OPERATEINFO") Application(ZC_BLOG_CLSID & "SIGNAL_OPERATEINFO")=Empty Application.UnLock If IsEmpty(bolOperateSuccess)=False Then If bolOperateSuccess=True Then Response.Write "

" & ZC_MSG266 & "

" End If If bolOperateSuccess=False Then Response.Write "

" & ZC_MSG267 & "

" End If Application.Lock Application(ZC_BLOG_CLSID & "SIGNAL_OPERATESUCCESS")=Empty Application.UnLock End If If IsEmpty(strOperateInfo)=False Then Dim s,t t=Split(strOperateInfo,vbCrlf) For Each s In t If s<>"" Then Response.Write "

" & s & "

" End If Next End If If IsEmpty(bolRebuildIndex)=False Then If bolRebuildIndex=True Then Response.Write "

" & ZC_MSG268 & "

" End If End If If IsEmpty(bolRebuildFiles)=False Then If bolRebuildFiles=True Then Response.Write "

" & ZC_MSG269 & "

" End If End If End Function '********************************************************* '********************************************************* ' 目的: 解析ZC_CUSTOM_DIRECTORY_REGEX '********************************************************* Function ParseCustomDirectory(strRegex,strPost,strCategory,strUser,strYear,strMonth,strDay,strID,strAlias) On Error Resume Next Dim s s=strRegex s=Replace(s,"{%post%}",strPost) s=Replace(s,"{%category%}",strCategory) s=Replace(s,"{%user%}",strUser) s=Replace(s,"{%year%}",strYear) s=Replace(s,"{%month%}",Right("0" & strMonth,2)) s=Replace(s,"{%day%}",Right("0" & strDay,2)) s=Replace(s,"{%id%}",strID) s=Replace(s,"{%alias%}",strAlias) ParseCustomDirectory=s Err.Clear End Function '********************************************************* '********************************************************* ' 目的: 按照CustomDirectory指示创建相应的目录 '********************************************************* Sub CreatDirectoryByCustomDirectory(strCustomDirectory) On Error Resume Next Dim s Dim t Dim i Dim fso Set fso = CreateObject("Scripting.FileSystemObject") s=BlogPath t=Split(strCustomDirectory,"/") For i=LBound(t) To UBound(t) If (IsEmpty(t(i))=False) And (t(i)<>"") Then s=s & t(i) & "\" If (fso.FolderExists(fldr)=False) Then Call fso.CreateFolder(s) End If End If Next Set fso = Nothing Err.Clear End Sub '********************************************************* '********************************************************* ' 目的: 加入二级菜单项 '********************************************************* Function MakeSubMenu(strName,strUrl,strType,isNewWindows) Dim strSource strSource=strSource & "" strSource=strSource & "" & strName strSource=strSource & "" MakeSubMenu=strSource End Function '********************************************************* '********************************************************* ' 目的: 注册插件函数 '********************************************************* Function RegisterPlugin(strPluginName,strPluginActiveFunction) 'On Error Resume Next Dim i i=UBound(PluginName) ReDim Preserve PluginName(i+1) ReDim Preserve PluginActiveFunction(i+1) PluginName(i)=strPluginName PluginActiveFunction(i)=strPluginActiveFunction 'Err.Clear End Function '********************************************************* '********************************************************* ' 目的: 激活插件函数 '********************************************************* Function ActivePlugin() On Error Resume Next Dim i For i=0 To UBound(PluginActiveFunction)-1 Call Execute(PluginActiveFunction(i)) Next Err.Clear End Function '********************************************************* '********************************************************* ' 目的: 安装插件函数,只运行一次 '********************************************************* Function InstallPlugin(strPluginName) On Error Resume Next Call Execute("Call InstallPlugin_" & strPluginName & "()") Err.Clear End Function '********************************************************* '********************************************************* ' 目的: 删除插件函数,只运行一次 '********************************************************* Function UninstallPlugin(strPluginName) On Error Resume Next Call Execute("Call UninstallPlugin_" & strPluginName & "()") Err.Clear End Function '********************************************************* '********************************************************* ' 目的: 检测插件是否已激活 '********************************************************* Function CheckPluginState(strPluginName) CheckPluginState=CheckPluginStateByNewValue(strPluginName,ZC_BLOG_THEME & "|" & ZC_USING_PLUGIN_LIST) End Function '********************************************************* '********************************************************* ' 目的: 检测插件是否已激活 by new value '********************************************************* Function CheckPluginStateByNewValue(strPluginName,newZC_USING_PLUGIN_LIST) Dim s,i s=Split(newZC_USING_PLUGIN_LIST,"|") For i=LBound(s) To UBound(s) If UCase(s(i))=UCase(strPluginName) Then CheckPluginStateByNewValue=True Exit Function End If Next CheckPluginStateByNewValue=False End Function '********************************************************* '********************************************************* ' 目的:挂上Action接口 ' 参数:'plugname:接口名称 'actioncode:要执行的语句,要转义为Execute可执行语句 '********************************************************* Function Add_Action_Plugin(plugname,actioncode) On Error Resume Next actioncode=Replace(actioncode,"Exit Function","b" & plugname & "=True") actioncode=Replace(actioncode,"Exit Sub","b" & plugname & "=True") Call Execute("ReDim Preserve " & plugname & "(UBound("& plugname &")+1)") Call Execute(plugname & "(UBound("& plugname &"))=" & plugname & "(UBound("& plugname &"))&""" & Replace(actioncode,"""","""""") & """" & ":") Err.Clear End Function '********************************************************* '********************************************************* ' 目的:挂上Filter接口 ' 参数:'plugname:接口名称 'functionname:要挂接的函数名 '********************************************************* Function Add_Filter_Plugin(plugname,functionname) On Error Resume Next Call Execute("s" & plugname & "=" & "s" & plugname & "&""" & functionname & """" & "& ""|""") Err.Clear End Function '********************************************************* '********************************************************* ' 目的:挂上Response接口 ' 参数:'plugname:接口名称 'parameter:要写入的内容 '********************************************************* Function Add_Response_Plugin(plugname,parameter) On Error Resume Next Call Execute(plugname & "=" & plugname & "&""" & Replace(parameter,"""","""""") & """") Err.Clear End Function '********************************************************* '********************************************************* ' 目的:GetSettingFormName '********************************************************* Function GetSettingFormName(s) On Error Resume Next Dim x Call Execute("x=" & s) GetSettingFormName=x Err.Clear End Function '********************************************************* '********************************************************* ' 目的:GetSettingFormName with Default '********************************************************* Function GetSettingFormNameWithDefault(s,d) On Error Resume Next Err.Clear Dim x Call Execute("x=" & s) GetSettingFormNameWithDefault=x If Err.Number<>0 Then GetSettingFormNameWithDefault=d End If Err.Clear End Function '********************************************************* '********************************************************* ' 目的:GetNameFormTheme '********************************************************* Function GetNameFormTheme(s) On Error Resume Next GetNameFormTheme=s Dim objXmlFile Set objXmlFile=Server.CreateObject("Microsoft.XMLDOM") objXmlFile.async = False objXmlFile.ValidateOnParse=False objXmlFile.load(BlogPath & "themes" & "/" & s & "/" & "theme.xml") If objXmlFile.readyState=4 Then If objXmlFile.parseError.errorCode <> 0 Then Else GetNameFormTheme=objXmlFile.documentElement.selectSingleNode("name").text End If End If Err.Clear End Function '********************************************************* '********************************************************* ' 目的: Blog ReBuild 核心 '********************************************************* Function MakeBlogReBuild_Core() On Error Resume Next 'plugin node For Each sAction_Plugin_MakeBlogReBuild_Core_Begin in Action_Plugin_MakeBlogReBuild_Core_Begin If Not IsEmpty(sAction_Plugin_MakeBlogReBuild_Core_Begin) Then Call Execute(sAction_Plugin_MakeBlogReBuild_Core_Begin) If bAction_Plugin_MakeBlogReBuild_Core_Begin=True Then Exit Function Next BlogReBuild_Statistics BlogReBuild_Archives BlogReBuild_Previous BlogReBuild_Comments BlogReBuild_GuestComments BlogReBuild_TrackBacks BlogReBuild_Catalogs BlogReBuild_Calendar BlogReBuild_Authors BlogReBuild_Tags 'BlogReBuild_Categorys BuildAllCache ExportRSS 'ExportATOM Call ClearGlobeCache() Call LoadGlobeCache() Dim bolOperateSuccess Application.Lock bolOperateSuccess=Application(ZC_BLOG_CLSID & "SIGNAL_OPERATESUCCESS") Application.UnLock Call SetBlogHint(bolOperateSuccess,False,Empty) MakeBlogReBuild_Core=True 'plugin node For Each sAction_Plugin_MakeBlogReBuild_Core_End in Action_Plugin_MakeBlogReBuild_Core_End If Not IsEmpty(sAction_Plugin_MakeBlogReBuild_Core_End) Then Call Execute(sAction_Plugin_MakeBlogReBuild_Core_End) If bAction_Plugin_MakeBlogReBuild_Core_End=True Then Exit Function Next Err.Clear End Function '********************************************************* '********************************************************* ' 目的: 全新的部份索引程序 '********************************************************* Function BuildAllCache() 'plugin node For Each sAction_Plugin_BuildAllCache_Begin in Action_Plugin_BuildAllCache_Begin If Not IsEmpty(sAction_Plugin_BuildAllCache_Begin) Then Call Execute(sAction_Plugin_BuildAllCache_Begin) If bAction_Plugin_BuildAllCache_Begin=True Then Exit Function Next Dim strList Dim ArticleList Dim AuthList Dim CateList Dim TagsList Dim aryAllList() Dim objRS Dim i Dim j Dim n Dim l Dim k Set objRS=Server.CreateObject("ADODB.Recordset") objRS.CursorType = adOpenKeyset objRS.LockType = adLockReadOnly objRS.ActiveConnection=objConn objRS.Source="" objRS.Open("SELECT [log_ID] FROM [blog_Article] WHERE ([log_Level]>1) AND ([log_Istop]=False) ORDER BY [log_PostTime] DESC") If (Not objRS.bof) And (Not objRS.eof) Then objRS.PageSize = ZC_DISPLAY_COUNT ReDim aryAllList(objRS.PageCount+1) For i=1 to objRS.PageCount objRS.AbsolutePage=i For j = 1 To objRS.PageSize If j=1 Then aryAllList(i)="AllPage" & i & "[" If i=1 Then aryAllList(i)=aryAllList(i) & objRS("log_ID") & ";" End If If j=objRS.PageSize Then aryAllList(i)=aryAllList(i) & "]" objRS.MoveNext If objRS.EOF Then aryAllList(i)=aryAllList(i) & "]":Exit For Next Next End If objRS.Close strList=strList & Join(aryAllList) Erase aryAllList objRS.Open("SELECT [log_ID] FROM [blog_Article] WHERE ([log_Level]>1) AND ([log_Istop]=True) ORDER BY [log_PostTime] DESC") If (Not objRS.bof) And (Not objRS.eof) Then objRS.PageSize = ZC_DISPLAY_COUNT ReDim aryAllList(objRS.PageCount+1) For i=1 to objRS.PageCount objRS.AbsolutePage=i For j = 1 To objRS.PageSize If j=1 Then aryAllList(i)="IstopPage" & i & "[" aryAllList(i)=aryAllList(i) & objRS("log_ID") & ";" If j=objRS.PageSize Then aryAllList(i)=aryAllList(i) & "]" objRS.MoveNext If objRS.EOF Then aryAllList(i)=aryAllList(i) & "]":Exit For Next Next End If objRS.Close strList=strList & Join(aryAllList) Erase aryAllList Call SaveToFile(BlogPath & "/CACHE/cache_list_"&ZC_BLOG_CLSID&".html",strList,"utf-8",False) BuildAllCache=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Calendar() 'plugin node For Each sAction_Plugin_BlogReBuild_Calendar_Begin in Action_Plugin_BlogReBuild_Calendar_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Calendar_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Calendar_Begin) If bAction_Plugin_BlogReBuild_Calendar_Begin=True Then Exit Function Next Dim objStream Dim strCalendar Dim i,j Dim objRS Dim k,l,m,n 'Calendar strCalendar=MakeCalendar("") strCalendar=TransferHTML(strCalendar,"[no-asp]") Call SaveToFile(BlogPath & "/include/calendar.asp",strCalendar,"utf-8",True) BlogReBuild_Calendar=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Archives() 'plugin node For Each sAction_Plugin_BlogReBuild_Archives_Begin in Action_Plugin_BlogReBuild_Archives_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Archives_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Archives_Begin) If bAction_Plugin_BlogReBuild_Archives_Begin=True Then Exit Function Next Dim i Dim j Dim l Dim n Dim objRS Dim objStream Dim ArtList 'Archives Dim strArchives Set objRS=objConn.Execute("SELECT * FROM [blog_Article] WHERE ([log_Level]>1) ORDER BY [log_PostTime] DESC") If (Not objRS.bof) And (Not objRS.eof) Then Dim dtmYM() i=0 j=0 ReDim Preserve dtmYM(0) Do While Not objRS.eof j=UBound(dtmYM) i=Year(objRS("log_PostTime")) & "-" & Month(objRS("log_PostTime")) If i<>dtmYM(j) Then ReDim Preserve dtmYM(j+1) dtmYM(j+1)=i End If objRS.MoveNext Loop End If objRS.Close Set objRS=Nothing If Not IsEmpty(dtmYM) Then For i=1 to UBound(dtmYM) l=Year(dtmYM(i)) n=Month(dtmYM(i))+1 IF n>12 Then l=l+1:n=1 Set objRS=objConn.Execute("SELECT COUNT([log_ID]) FROM [blog_Article] WHERE ([log_Level]>1) AND [log_PostTime] BETWEEN #"& Year(dtmYM(i)) &"-"& Month(dtmYM(i)) &"-1# AND #"& l &"-"& n &"-1#") If (Not objRS.bof) And (Not objRS.eof) Then If ZC_MOONSOFT_PLUGIN_ENABLE=True Then strArchives=strArchives & "
  • " & Year(dtmYM(i)) & " " & ZVA_Month(Month(dtmYM(i))) & " (" & objRS(0) & ")" +"
  • " ' Call BuildCategory(Empty,Empty,Empty,Year(dtmYM(i)) & "-" & Month(dtmYM(i)),Empty,ZC_DISPLAY_MODE_ALL,ZC_STATIC_DIRECTORY,Year(dtmYM(i)) & "_" & Month(dtmYM(i))& "." & ZC_STATIC_TYPE) Else strArchives=strArchives & "
  • " & Year(dtmYM(i)) & " " & ZVA_Month(Month(dtmYM(i))) & " (" & objRS(0) & ")" +"
  • " End If If ZC_ARCHIVE_COUNT>0 Then If i=ZC_ARCHIVE_COUNT Then Exit For End If End If objRS.Close Set objRS=Nothing Next End If strArchives=TransferHTML(strArchives,"[no-asp]") Call SaveToFile(BlogPath & "/include/archives.asp",strArchives,"utf-8",True) BlogReBuild_Archives=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Catalogs() 'plugin node For Each sAction_Plugin_BlogReBuild_Catalogs_Begin in Action_Plugin_BlogReBuild_Catalogs_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Catalogs_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Catalogs_Begin) If bAction_Plugin_BlogReBuild_Catalogs_Begin=True Then Exit Function Next Dim objRS Dim objStream Dim ArtList 'Catalogs Dim strCatalog Set objRS=objConn.Execute("SELECT * FROM [blog_Category] ORDER BY [cate_Order] ASC,[cate_Count] DESC,[cate_ID] ASC") If (Not objRS.bof) And (Not objRS.eof) Then Do While Not objRS.eof strCatalog=strCatalog & "
  •  "+Categorys(objRS("cate_ID")).Name + " (" & Categorys(objRS("cate_ID")).Count & ")" +"
  • " 'If ZC_MOONSOFT_PLUGIN_ENABLE=True Then ' Call BuildCategory(Empty,Categorys(objRS("cate_ID")).ID,Empty,Empty,Empty,ZC_DISPLAY_MODE_ALL,Categorys(objRS("cate_ID")).Directory,Categorys(objRS("cate_ID")).FileName) 'End If objRS.MoveNext Loop End If objRS.Close Set objRS=Nothing strCatalog=TransferHTML(strCatalog,"[no-asp]") Call SaveToFile(BlogPath & "/include/catalog.asp",strCatalog,"utf-8",True) BlogReBuild_Catalogs=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Categorys() 'plugin node For Each sAction_Plugin_BlogReBuild_Categorys_Begin in Action_Plugin_BlogReBuild_Categorys_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Categorys_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Categorys_Begin) If bAction_Plugin_BlogReBuild_Categorys_Begin=True Then Exit Function Next Dim objRS Dim objStream Dim objArticle Dim i 'Categorys Dim strCategory Dim Category For Each Category in Categorys If IsObject(Category) Then Set objRS=objConn.Execute("SELECT [log_ID] FROM [blog_Article] WHERE ([log_ID]>0) AND ([log_Level]>1) AND ([log_CateID]="&Category.ID&") ORDER BY [log_PostTime] DESC") If (Not objRS.bof) And (Not objRS.eof) Then For i=1 to ZC_PREVIOUS_COUNT Set objArticle=New TArticle If objArticle.LoadInfoByID(objRS("log_ID")) Then strCategory=strCategory & "
  • " & objArticle.Title & "
  • " End If Set objArticle=Nothing objRS.MoveNext If objRS.eof Then Exit For Next End If objRS.close strCategory=TransferHTML(strCategory,"[no-asp]") Call SaveToFile(BlogPath & "/include/category_"&Category.ID&".asp",strCategory,"utf-8",True) strCategory="" End If Next BlogReBuild_Categorys=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Authors() 'plugin node For Each sAction_Plugin_BlogReBuild_Authors_Begin in Action_Plugin_BlogReBuild_Authors_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Authors_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Authors_Begin) If bAction_Plugin_BlogReBuild_Authors_Begin=True Then Exit Function Next Dim objRS Dim objStream 'Authors Dim strAuthor Dim User For Each User in Users If IsObject(User) Then strAuthor=strAuthor & "
  • "+User.Name + " (" & User.Count & ")" +"
  • " End If Next strAuthor=TransferHTML(strAuthor,"[no-asp]") Call SaveToFile(BlogPath & "/include/authors.asp",strAuthor,"utf-8",True) BlogReBuild_Authors=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Tags() 'plugin node For Each sAction_Plugin_BlogReBuild_Tags_Begin in Action_Plugin_BlogReBuild_Tags_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Tags_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Tags_Begin) If bAction_Plugin_BlogReBuild_Tags_Begin=True Then Exit Function Next Dim objRS Dim objStream Dim i,j i=GetSettingFormName("ZC_TAGS_DISPLAY_COUNT") If i="" Then i=50 j=0 'Authors Dim strTag Set objRS=objConn.Execute("SELECT * FROM [blog_Tag] ORDER BY [tag_Count] DESC,[tag_ID] ASC") If (Not objRS.bof) And (Not objRS.eof) Then Do While Not objRS.eof If j=i Then Exit Do strTag=strTag & "
  • "+Tags(objRS("tag_ID")).Name + " (" & Tags(objRS("tag_ID")).Count & ")" +"
  • " objRS.MoveNext j=j+1 Loop End If objRS.Close Set objRS=Nothing strTag=TransferHTML(strTag,"[no-asp]") Call SaveToFile(BlogPath & "/include/tags.asp",strTag,"utf-8",True) BlogReBuild_Tags=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Previous() 'plugin node For Each sAction_Plugin_BlogReBuild_Previous_Begin in Action_Plugin_BlogReBuild_Previous_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Previous_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Previous_Begin) If bAction_Plugin_BlogReBuild_Previous_Begin=True Then Exit Function Next Dim i Dim objRS Dim objStream Dim objArticle 'Previous Dim strPrevious Set objRS=objConn.Execute("SELECT [log_ID] FROM [blog_Article] WHERE ([log_ID]>0) AND ([log_Level]>1) ORDER BY [log_PostTime] DESC") If (Not objRS.bof) And (Not objRS.eof) Then For i=1 to ZC_PREVIOUS_COUNT Set objArticle=New TArticle If objArticle.LoadInfoByID(objRS("log_ID")) Then strPrevious=strPrevious & "
  • ["& Right("0" & Month(objArticle.PostTime),2) & "/" & Right("0" & Day(objArticle.PostTime),2) &"]" & objArticle.Title & "
  • " End If Set objArticle=Nothing objRS.MoveNext If objRS.eof Then Exit For Next End If objRS.close strPrevious=TransferHTML(strPrevious,"[no-asp]") Call SaveToFile(BlogPath & "/include/previous.asp",strPrevious,"utf-8",True) BlogReBuild_Previous=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Comments() 'plugin node For Each sAction_Plugin_BlogReBuild_Comments_Begin in Action_Plugin_BlogReBuild_Comments_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Comments_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Comments_Begin) If bAction_Plugin_BlogReBuild_Comments_Begin=True Then Exit Function Next Dim objRS Dim objStream Dim objArticle 'Comments Dim strComments Dim s Dim i Set objRS=objConn.Execute("SELECT [log_ID],[comm_ID],[comm_Content],[comm_PostTime],[comm_Author] FROM [blog_Comment] WHERE [log_ID]>0 ORDER BY [comm_PostTime] DESC,[comm_ID] DESC") If (Not objRS.bof) And (Not objRS.eof) Then For i=1 to ZC_MSG_COUNT s=objRS("comm_Content") s=Replace(s,vbCrlf,"") If (Len(s)>ZC_RECENT_COMMENT_WORD_MAX) And (ZC_RECENT_COMMENT_WORD_MAX>(Len(ZC_MSG305)+1)) Then s=Left(s,ZC_RECENT_COMMENT_WORD_MAX-(Len(ZC_MSG305)+1))&ZC_MSG305 Set objArticle=New TArticle If objArticle.LoadInfoByID(objRS("log_ID")) Then strComments=strComments & "
  • "+s+"
  • " End If Set objArticle=Nothing objRS.MoveNext If objRS.eof Then Exit For Next End If objRS.close Set objRS=Nothing strComments=TransferHTML(strComments,"[no-asp]") Call SaveToFile(BlogPath & "/include/comments.asp",strComments,"utf-8",True) BlogReBuild_Comments=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_GuestComments() 'plugin node For Each sAction_Plugin_BlogReBuild_GuestComments_Begin in Action_Plugin_BlogReBuild_GuestComments_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_GuestComments_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_GuestComments_Begin) If bAction_Plugin_BlogReBuild_GuestComments_Begin=True Then Exit Function Next Dim objRS Dim objStream Dim objArticle 'Comments Dim strComments Dim s Dim i Set objRS=objConn.Execute("SELECT [log_ID],[comm_ID],[comm_Content],[comm_PostTime],[comm_Author] FROM [blog_Comment] WHERE [log_ID]=0 ORDER BY [comm_ID] DESC") If (Not objRS.bof) And (Not objRS.eof) Then For i=1 to ZC_MSG_COUNT s=objRS("comm_Content") s=Replace(s,vbCrlf,"") If (len(s)>ZC_RECENT_COMMENT_WORD_MAX) And (ZC_RECENT_COMMENT_WORD_MAX>(Len(ZC_MSG305)+1)) Then s=Left(s,ZC_RECENT_COMMENT_WORD_MAX-(Len(ZC_MSG305)+1))&ZC_MSG305 strComments=strComments & "
  • "+s+"
  • " objRS.MoveNext If objRS.eof Then Exit For Next End If objRS.close Set objRS=Nothing strComments=TransferHTML(strComments,"[no-asp]") Call SaveToFile(BlogPath & "/include/guestcomments.asp",strComments,"utf-8",True) BlogReBuild_GuestComments=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_TrackBacks() 'plugin node For Each sAction_Plugin_BlogReBuild_TrackBacks_Begin in Action_Plugin_BlogReBuild_TrackBacks_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_TrackBacks_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_TrackBacks_Begin) If bAction_Plugin_BlogReBuild_TrackBacks_Begin=True Then Exit Function Next Dim objRS Dim objStream Dim objArticle 'TrackBacks Dim strTrackBacks Dim s Dim i Set objRS=objConn.Execute("SELECT * FROM [blog_TrackBack] ORDER BY [tb_ID] DESC") If (Not objRS.bof) And (Not objRS.eof) Then For i=1 to ZC_MSG_COUNT s=objRS("tb_Title") s=Replace(s,vbCrlf,"") If (len(s)>ZC_RECENT_COMMENT_WORD_MAX) And (ZC_RECENT_COMMENT_WORD_MAX>(Len(ZC_MSG305)+1)) Then s=Left(s,ZC_RECENT_COMMENT_WORD_MAX-(Len(ZC_MSG305)+1))&ZC_MSG305 Set objArticle=New TArticle If objArticle.LoadInfoByID(objRS("log_ID")) Then strTrackBacks=strTrackBacks & "
  • "+s+"
  • " End If Set objArticle=Nothing objRS.MoveNext If objRS.eof Then Exit For Next End If objRS.close Set objRS=Nothing strTrackBacks=TransferHTML(strTrackBacks,"[no-asp]") Call SaveToFile(BlogPath & "/include/trackbacks.asp",strTrackBacks,"utf-8",True) BlogReBuild_TrackBacks=True End Function '********************************************************* '********************************************************* ' 目的: '********************************************************* Function BlogReBuild_Statistics() 'plugin node For Each sAction_Plugin_BlogReBuild_Statistics_Begin in Action_Plugin_BlogReBuild_Statistics_Begin If Not IsEmpty(sAction_Plugin_BlogReBuild_Statistics_Begin) Then Call Execute(sAction_Plugin_BlogReBuild_Statistics_Begin) If bAction_Plugin_BlogReBuild_Statistics_Begin=True Then Exit Function Next Dim i Dim objRS Dim objStream '重新统计分类及用户的文章数、评论数 Dim Category For Each Category in Categorys If IsObject(Category) Then Set objRS=objConn.Execute("SELECT COUNT([log_ID]) FROM [blog_Article] WHERE [log_Level]>1 AND [log_CateID]=" & Category.ID ) i=objRS(0) objConn.Execute("UPDATE [blog_Category] SET [cate_Count]="&i&" WHERE [cate_ID] =" & Category.ID) Set objRS=Nothing End If Next Dim User 'For Each User in Users ' If IsObject(User) Then ' Set objRS=objConn.Execute("SELECT COUNT([log_ID]) FROM [blog_Article] WHERE [log_Level]>1 AND [log_AuthorID]=" & User.ID ) ' i=objRS(0) ' objConn.Execute("UPDATE [blog_Member] SET [mem_PostLogs]="&i&" WHERE [mem_ID] =" & User.ID) ' Set objRS=Nothing ' ' Set objRS=objConn.Execute("SELECT COUNT([comm_ID]) FROM [blog_Comment] WHERE [comm_AuthorID]=" & User.ID ) ' i=objRS(0) ' objConn.Execute("UPDATE [blog_Member] SET [mem_PostComms]="&i&" WHERE [mem_ID] =" & User.ID) ' Set objRS=Nothing ' End If 'Next 'Dim Tag 'For Each Tag in Tags ' If IsObject(Tag) Then ' Set objRS=objConn.Execute("SELECT COUNT([log_ID]) FROM [blog_Article] WHERE [log_Level]>1 AND [log_Tag] LIKE '%{" & Tag.ID & "}%'") ' i=objRS(0) ' objConn.Execute("UPDATE [blog_Tag] SET [tag_Count]="&i&" WHERE [tag_ID] =" & Tag.ID) ' Set objRS=Nothing ' End If 'Next 'Statistics Dim strStatistics Set objRS=Server.CreateObject("ADODB.Recordset") objRS.CursorType = adOpenKeyset objRS.LockType = adLockReadOnly objRS.ActiveConnection=objConn objRS.Source="" objRS.Open("SELECT COUNT([log_ID])AS allArticle,SUM([log_CommNums]) AS allCommNums,SUM([log_ViewNums]) AS allViewNums,SUM([log_TrackBackNums]) AS allTrackBackNums FROM [blog_Article]") If (Not objRS.bof) And (Not objRS.eof) Then strStatistics=strStatistics & "
  • "& ZC_MSG082 &":" & objRS("allArticle") & "
  • " strStatistics=strStatistics & "
  • "& ZC_MSG124 &":" & objRS("allCommNums") & "
  • " strStatistics=strStatistics & "
  • "& ZC_MSG125 &":" & objRS("allTrackBackNums") & "
  • " strStatistics=strStatistics & "
  • "& ZC_MSG129 &":" & objRS("allViewNums") & "
  • " End If objRS.Close objRS.Open("SELECT COUNT([comm_ID])AS allComment FROM [blog_Comment] WHERE [log_ID]=0") If (Not objRS.bof) And (Not objRS.eof) Then strStatistics=strStatistics & "
  • "& ZC_MSG284 &":" & objRS("allComment") & "
  • " End If objRS.Close strStatistics=strStatistics & "
  • "& ZC_MSG306 &":" & GetNameFormTheme(ZC_BLOG_THEME) & "
  • " strStatistics=strStatistics & "
  • "& ZC_MSG083 &":" & ZC_BLOG_CSS & "
  • " 'strStatistics=strStatistics & "
  • "& ZC_MSG084 &":" & ZC_BLOG_LANGUAGE & "
  • " Set objRS=Nothing strStatistics=TransferHTML(strStatistics,"[no-asp]") Call SaveToFile(BlogPath & "/include/statistics.asp",strStatistics,"utf-8",False) Call GetCategory() Call GetUser() Call GetTags() Call GetKeyWords() BlogReBuild_Statistics=True End Function '********************************************************* '///////////////////////////////////////////////////////////////////////////////////////// '********************************************************* ' 目的: Export RSS 2.0 '********************************************************* Function ExportRSS() 'plugin node For Each sAction_Plugin_ExportRSS_Begin in Action_Plugin_ExportRSS_Begin If Not IsEmpty(sAction_Plugin_ExportRSS_Begin) Then Call Execute(sAction_Plugin_ExportRSS_Begin) If bAction_Plugin_ExportRSS_Begin=True Then Exit Function Next Dim Rss2Export Dim objArticle Set Rss2Export = New TNewRss2Export With Rss2Export .TimeZone=ZC_TIME_ZONE .AddChannelAttribute "title",TransferHTML(ZC_BLOG_TITLE,"[html-format]") .AddChannelAttribute "link",TransferHTML(ZC_BLOG_HOST,"[html-format]") .AddChannelAttribute "description",TransferHTML(ZC_BLOG_SUBTITLE,"[html-format]") .AddChannelAttribute "generator","RainbowSoft Studio Z-Blog " & ZC_BLOG_VERSION .AddChannelAttribute "language",ZC_BLOG_LANGUAGE .AddChannelAttribute "copyright",TransferHTML(ZC_BLOG_COPYRIGHT,"[nohtml][html-format]") .AddChannelAttribute "pubDate",GetTime(Now()) Dim i Dim objRS Set objRS=objConn.Execute("SELECT [log_ID],[log_Tag],[log_CateID],[log_Title],[log_Intro],[log_Content],[log_Level],[log_AuthorID],[log_PostTime],[log_CommNums],[log_ViewNums],[log_TrackBackNums],[log_Url],[log_Istop] FROM [blog_Article] WHERE ([log_ID]>0) AND ([log_Level]>2) ORDER BY [log_PostTime] DESC") If (Not objRS.bof) And (Not objRS.eof) Then For i=1 to ZC_RSS2_COUNT Set objArticle=New TArticle If objArticle.LoadInfoByArray(Array(objRS("log_ID"),objRS("log_Tag"),objRS("log_CateID"),objRS("log_Title"),objRS("log_Intro"),objRS("log_Content"),objRS("log_Level"),objRS("log_AuthorID"),objRS("log_PostTime"),objRS("log_CommNums"),objRS("log_ViewNums"),objRS("log_TrackBackNums"),objRS("log_Url"),objRS("log_Istop"))) Then If ZC_RSS_EXPORT_WHOLE Then .AddItem objArticle.HtmlTitle,Users(objArticle.AuthorID).Email & " (" & Users(objArticle.AuthorID).Name & ")",objArticle.HtmlUrl,objArticle.PostTime,objArticle.HtmlUrl,objArticle.HtmlContent,Categorys(objArticle.CateID).HtmlName,objArticle.CommentUrl,objArticle.WfwComment,objArticle.WfwCommentRss,objArticle.TrackBackUrl Else .AddItem objArticle.HtmlTitle,Users(objArticle.AuthorID).Email & " (" & Users(objArticle.AuthorID).Name & ")",objArticle.HtmlUrl,objArticle.PostTime,objArticle.HtmlUrl,objArticle.HtmlIntro,Categorys(objArticle.CateID).HtmlName,objArticle.CommentUrl,objArticle.WfwComment,objArticle.WfwCommentRss,objArticle.TrackBackUrl End If End If objRS.MoveNext If objRS.eof Then Exit For Set objArticle=Nothing Next End If End With 'Rss2Export.Execute Rss2Export.SaveToFile(BlogPath & "/rss.xml") Set Rss2Export = Nothing objRS.close Set objRS=Nothing ExportRSS=True 'Response.ContentType = "text/html" 'Response.Clear End Function '********************************************************* '********************************************************* ' 目的: Export ATOM 1.0 '********************************************************* Function ExportATOM() 'plugin node For Each sAction_Plugin_ExportATOM_Begin in Action_Plugin_ExportATOM_Begin If Not IsEmpty(sAction_Plugin_ExportATOM_Begin) Then Call Execute(sAction_Plugin_ExportATOM_Begin) If bAction_Plugin_ExportATOM_Begin=True Then Exit Function Next Dim objArticle Dim Atom10Export Set Atom10Export = New TAtom10Export Atom10Export.TimeZone=ZC_TIME_ZONE Dim AtomEntry Dim AtomFeed Set AtomFeed = New TAtomFeed With AtomFeed .atomTitle=TransferHTML(ZC_BLOG_TITLE,"[html-format]") .atomSubtitle=TransferHTML(ZC_BLOG_SUBTITLE,"[html-format]") .atomID=ZC_BLOG_HOST .atomLink "alternate","text/html",ZC_BLOG_HOST .atomLink "self","application/atom+xml",ZC_BLOG_HOST & "atom.xml" '.atomPerson "author",BlogUser.Name,BlogUser.Email,BlogUser.HomePage .atomGenerator "RainbowSoft Studio Z-Blog","http://www.rainbowsoft.org/",ZC_BLOG_VERSION .atomUpdated=GetTime(Now()) End With Atom10Export.GetFeed(AtomFeed.Node) Dim i Dim objRS Set objRS=objConn.Execute("SELECT [log_ID],[log_Tag],[log_CateID],[log_Title],[log_Intro],NULL,[log_Level],[log_AuthorID],[log_PostTime],[log_CommNums],[log_ViewNums],[log_TrackBackNums],[log_Url],[log_Istop] FROM [blog_Article] WHERE ([log_ID]>0) AND ([log_Level]>2) ORDER BY [log_PostTime] DESC") If (Not objRS.bof) And (Not objRS.eof) Then For i=1 to ZC_RSS2_COUNT Set objArticle=New TArticle Set AtomEntry = New TAtomEntry With AtomEntry If objArticle.LoadInfoByArray(Array(objRS("log_ID"),objRS("log_Tag"),objRS("log_CateID"),objRS("log_Title"),objRS("log_Intro"),,objRS("log_Level"),objRS("log_AuthorID"),objRS("log_PostTime"),objRS("log_CommNums"),objRS("log_ViewNums"),objRS("log_TrackBackNums"),objRS("log_Url"),objRS("log_Istop"))) Then .atomTitle=objArticle.HtmlTitle .atomPerson "author",Users(objArticle.AuthorID).Name,Users(objArticle.AuthorID).Email,Users(objArticle.AuthorID).HomePage .atomCategory "",Categorys(objArticle.CateID).Url,Categorys(objArticle.CateID).HtmlName .atomUpdated=objArticle.PostTime .atomPublished=objArticle.PostTime .atomSummary=objArticle.HtmlIntro .atomLink "alternate","text/html",objArticle.Url .atomID=objArticle.Url End If End With Atom10Export.GetEntry(AtomEntry.Node) Set AtomEntry = Nothing Set objArticle=Nothing objRS.MoveNext If objRS.eof Then Exit For Next End If objRS.close Set objRS=Nothing 'Atom10Export.Execute Atom10Export.SaveToFile(BlogPath & "/atom.xml") Set Atom10Export = Nothing ExportATOM=True 'Response.ContentType = "text/html" 'Response.Clear End Function '********************************************************* '********************************************************* ' 目的: Build Category '********************************************************* Function BuildCategory(intPage,intCateId,intAuthorId,dtmYearMonth,strTagsName,intType,strDirectory,strFileName) Dim ArtList Set ArtList=New TArticleList ArtList.LoadCache ArtList.template="CATALOG" If ArtList.ExportByMixed(intPage,intCateId,intAuthorId,dtmYearMonth,strTagsName,intType) Then ArtList.FileName=strFileName ArtList.Directory=strDirectory ArtList.Build ArtList.Save End If Set ArtList=Nothing End Function '********************************************************* '********************************************************* ' 目的: Build Article '********************************************************* Function BuildArticle(intID,bolBuildNavigate,bolBuildCategory) Dim objArticle Set objArticle=New TArticle If objArticle.LoadInfoByID(intID) Then objArticle.Statistic objArticle.template="SINGLE" If objArticle.Export(ZC_DISPLAY_MODE_ALL) Then objArticle.SaveCache objArticle.Build objArticle.Save If (bolBuildCategory=True) And (ZC_MOONSOFT_PLUGIN_ENABLE=True) Then Call BuildCategory(Empty,Categorys(objArticle.CateID).ID,Empty,Empty,Empty,ZC_DISPLAY_MODE_ALL,Categorys(objArticle.CateID).Directory,Categorys(objArticle.CateID).FileName) Call BuildCategory(Empty,Empty,Empty,Year(objArticle.PostTime) & "-" & Month(objArticle.PostTime),Empty,ZC_DISPLAY_MODE_ALL,ZC_STATIC_DIRECTORY,Year(objArticle.PostTime) & "_" & Month(objArticle.PostTime) & "." & ZC_STATIC_TYPE) End If End If If (bolBuildNavigate=True) And (ZC_USE_NAVIGATE_ARTICLE=True) Then Dim objRS Set objRS=objConn.Execute("SELECT TOP 1 [log_ID] FROM [blog_Article] WHERE ([log_Level]>2) AND ([log_PostTime]<#" & objArticle.PostTime & "#) ORDER BY [log_PostTime] DESC") If (Not objRS.bof) And (Not objRS.eof) Then Call BuildArticle(objRS("log_ID"),False,False) End If Set objRS=Nothing Set objRS=objConn.Execute("SELECT TOP 1 [log_ID] FROM [blog_Article] WHERE ([log_Level]>2) AND ([log_PostTime]>#" & objArticle.PostTime & "#) ORDER BY [log_PostTime] ASC") If (Not objRS.bof) And (Not objRS.eof) Then Call BuildArticle(objRS("log_ID"),False,False) End If Set objRS=Nothing End If BuildArticle=True End If Set objArticle=Nothing End Function '********************************************************* %>