特性可設定私有快取或公用緩存,提高效率可自由選擇使用Stream 元件或FSO 元件支援自訂檔案編碼可儲存檔案
屬性
Name
文本,此範本名稱,主要用於使用公共快取時區分不同範本。
Format
文本,文件編碼類型,可設定值。
Object
文本,使用組件,可設定值:
Stream
FSO
PublicCache
布林值,使用公共緩存,開啟時模板文件將保存到Application對象,其他引用此模板類的對象設置相同Name值並同樣打開公共緩存即可從緩存讀取。 (Load方法)
PrivateCache
布林值,使用私人緩存,開啟時模板檔案將保存到物件內部變量,同一引用此模板類別的物件可讀取。 (Load方法)
Direction
文本,模板檔案所在目錄,前後無需斜杠或反斜杠,如:template/default
File
文本,模板檔名,前邊無需斜杠或反斜杠,如:default.html
SaveDirection
文本,儲存檔案所在目錄,前後無需斜杠或反斜杠,如:html/default
SaveFile
文字,儲存檔案名,前邊無需斜杠或反斜杠,如:default.html
物件
Code
文本,當前文本,使用SetVar方法時對此對象進行替換,使用Load方法時將模板重載到此對象
Storage
文本,已儲存文本,使用SaveFront或SaveLast方法時將Code物件中文本儲存到此物件的開頭或結尾,可用於循環後得到所有程式碼
方法
ClearCache
清除公共快取和私有快取(強制從檔案重載範本)
ClearPublicCache
清除公共快取
ClearPrivateCache
清除私有快取
ClearCode
清除Code對象
ClearStorage
清除Storage對象
SaveFront
將目前Code物件中文字儲存到Storage物件開頭
SaveLast
將目前Code物件中文字儲存到Storage物件結尾
SaveCode
將目前Code物件中文字儲存到文件
SaveStorage
將目前Storage物件中文字儲存到文件
SetVar
對目前Code物件中文字進行替換參數:需要被替換的文本,欲替換後的文本
Load
將模板檔案載入Code對象,當開啟並存在私有快取時,從私有快取載入,當開啟並存在公共快取時,從公共快取載入,若無快取則從檔案載入
內部變數
ccStrPath
預設根目錄
ccStrCookieName
預設Application物件名稱前綴
程式碼
Class ccClsTemplate
Private ccStrCode,ccStrStorage
Private ccStrCacheCode
Private ccBlnPublicCache,ccBlnPrivateCache
Private ccStrName,ccStrCookieName
Private ccStrDirection,ccStrSaveDirection,ccStrFile,ccStrSaveFile,ccStrPath
Private ccObjStream,ccObjFSO,ccStrFormat,ccIntObject,ccObjText,ccIntFormat
Private Sub Class_Initialize
ccStrName = "default" '預設名稱
ccBlnPublicCache = False
ccBlnPrivateCache = False
ccStrFile = "cache.html"
ccStrSaveFile = "save_cache.html"
ccStrCookieName = "ccClass_Template" 'Application物件名稱前綴
ccStrFormat = "UTF-8" 'UTF-8|ASCII|GB2312|BIG5
ccIntFormat = -1
ccIntObject = 1 '預設讀取/儲存模板元件1:ADODB.Stream 2:FSO
ccStrPath = Server.MapPath("./")&"" '預設根路徑
End Sub
Public Property Let Name(ccStrName_in)
ccStrName = LCase(Trim(ccStrName_in))
End Property
Public Property Let Format(ccStrFormat_in)
ccStrFormat = ccStrFormat_in
If InStr(LCase(Trim(ccStrFormat_in)),"utf") > 0 Then
ccIntFormat = -1
Else
ccIntFormat = 0
End If
End Property
Public Property Let Object(ccStrObject_in)
ccStrObject_in = LCase(Trim(ccStrObject_in))
If InStr(ccStrObject_in,"fso") > 0 Then
ccIntObject = 2
Else
ccIntObject = 1
End If
End Property
Public Property Let PublicCache(ccBlnPublicCache_in)
If ccBlnPublicCache_in = True Then
ccBlnPublicCache = True
Else
ccBlnPublicCache = False
End If
End Property
Public Property Let PrivateCache(ccBlnPrivateCache_in)
If ccBlnPrivateCache_in = True Then
ccBlnPrivateCache = True
Else
ccBlnPrivateCache = False
End If
End Property
Public Property Let Direction(ccStrDirection_in)
ccStrDirection = ccStrDirection_in
End Property
Public Property Let File(ccStrFile_in)
If ccStrFile_in <> "" Then
ccStrFile = ccStrFile_in
End If
End Property
Public Property Let SaveDirection(ccStrSaveDirection_in)
ccStrSaveDirection = ccStrSaveDirection_in
End Property
Public Property Let SaveFile(ccStrSaveFile_in)
If ccStrSaveFile_in <> "" Then
ccStrSaveFile = ccStrSaveFile_in
End If
End Property
Public Property Get Code
Code = ccStrCode
End Property
Public Property Get Storage
Storage = ccStrStorage
End Property
Public Sub ClearCache
Call ClearPrivateCache
Call ClearPublicCache
End Sub
Public Sub ClearPrivateCache
ccStrCacheCode = ""
End Sub
Public Sub ClearPublicCache
Application(ccStrCookieName&ccStrName) = ""
End Sub
Public Sub ClearStorage
ccStrStorage = ""
End Sub
Public Sub ClearCode
ccStrCode = ""
End Sub
Public Sub SaveFront
ccStrStorage = ccStrCode & ccStrStorage
End Sub
Public Sub SaveLast
ccStrStorage = ccStrStorage & ccStrCode
End Sub
Public Sub SaveCode
Call SaveToFile(1)
End Sub
Public Sub SaveStorage
Call SaveToFile(2)
End Sub
Public Sub SetVar(ccStrTag_in,ccStrValue_in)
ccStrCode = RePlace(ccStrCode,ccStrTag_in,ccStrValue_in)
End Sub
Private Sub SaveToFile(ccIntCode_in)
Dim ccStrSaveCode
If ccIntCode_in = 1 Then
ccStrSaveCode = ccStrCode
Else
ccStrSaveCode = ccStrStorage
End If
If ccIntObject = 1 Then
Set ccObjStream = Server.CreateObject("ADODB.Stream")
With ccObjStream
.Type = 2
.Mode = 3
.Open
.Charset = ccStrFormat
.Position = ccObjStream.Size
.WriteText ccStrSaveCode
.SaveToFile ccStrPath & ccStrSaveDirection & "" & ccStrSaveFile,2
.Close
End With
Set ccObjStream = Nothing
Else
Set ccObjFSO = CreateObject("Scripting.FileSystemObject")
If ccObjFSO.FileExists(ccStrPath & ccStrSaveDirection & "" & ccStrSaveFile) = True Then
ccObjFSO.DeleteFile(ccStrPath & ccStrSaveDirection & "" & ccStrSaveFile)
End If
Set ccObjText = ccObjFSO.OpenTextFile(ccStrPath & ccStrSaveDirection & "" & ccStrSaveFile,2,True,ccIntFormat)
ccObjText.Write ccStrSaveCode
Set ccObjText = Nothing
Set ccObjFSO = Nothing
End If
ccStrSaveCode = ""
End Sub
Public Sub Load
ccStrCode = ""
If ccBlnPrivateCache = True Then
If ccFncIsEmpty(ccStrCacheCode) = False Then
ccStrCode = ccStrCacheCode
Exit Sub
End If
End If
If ccBlnPublicCache = True Then
If ccFncIsEmpty(Application(ccStrCookieName&ccStrName)) = False Then
ccStrCode = Application(ccStrCookieName&ccStrName)
Exit Sub
End If
End If
If ccIntObject = 1 Then
Set ccObjStream = Server.CreateObject("ADODB.Stream")
With ccObjStream
.Type = 2
.Mode = 3
.Open
.Charset = ccStrFormat
.Position = ccObjStream.Size
.LoadFromFile ccStrPath & ccStrDirection & "" & ccStrFile
ccStrCode = .ReadText
.Close
End With
Set ccObjStream = Nothing
Else
Set ccObjFSO = CreateObject("Scripting.FileSystemObject")
If ccObjFSO.FileExists(ccStrPath & ccStrDirection & "" & ccStrFile) = True Then
Set ccObjText = ccObjFSO.OpenTextFile(ccStrPath & ccStrDirection & "" & ccStrFile,1,False,ccIntFormat)
ccStrCode = ccObjText.ReadAll
Set ccObjText = Nothing
End If
Set ccObjFSO = Nothing
End If
If ccBlnPrivateCache = True Then
ccStrCacheCode = ccStrCode
End If
If ccBlnPublicCache = True Then
Application(ccStrCookieName&ccStrName) = ccStrCode
End If
End Sub
End Class
Function ccFncIsEmpty(ByRef ccStrValue_in)
If IsNull(ccStrValue_in) Or IsEmpty(ccStrValue_in) Or ccStrValue_in = "" Then
ccFncIsEmpty = True
Else
ccFncIsEmpty = False
End If
End Function
實例
範本文件內容
<#test#>
ASP程式碼
Dim objTemplate
Set objTemplate = New ccClsTemplate
objTemplate.Name = "Test"
objTemplate.Format = "UTF-8"
'開啟快取
objTemplate.PublicCache = True
objTemplate.PrivateCache = True
'設定範本目錄和檔名
objTemplate.Direction = "test"
objTemplate.File = "test.html"
'設定保存檔案目錄和檔案名
objTemplate.SaveDirection = "test"
objTemplate.SaveFile = "test3.html"
'載入模板
Call objTemplate.Load
'進行文字替換
Call objTemplate.SetVar("<#test#>","Hello world.")
'將文字儲存至Storage暫存
Call objTemplate.SaveLast
'重新載入範本,此時將從私有快取重新裝載,提高效率
Call objTemplate.Load
'替換為其他值
Call objTemplate.SetVar("<#test#>"," By Cloudream.")
'儲存至Storage結尾暫存
Call objTemplate.SaveLast
'儲存Code至文件
Call objTemplate.SaveCode
Response.Write objTemplate.Storage
Set objTemplate = Nothing
顯示結果
Hello world. By Cloudream.
儲存檔案結果
By Cloudream.