PHP .NET 西安网站建设 西安做网站 西安网站制作 西安微信开发

西安网站建设

咨询热线:029-81614085
News/建站资讯
Hotline/咨询热线

电话:029-8161 4085
手机:189 9121 9418

网页设计/ Web design
您的位置:首页 > 建站资讯 > 网页设计

使用模板实现ASP代码与页面分离(2)

浏览次数:922 时间:2011-06-13 09:44:44

实现代码:


<%
’================================================================
’CLASS NAME:  kktTemplate ASP页面模板对象
’DESIGN BY :     彭国辉
’DATE:                 2004-07-05
’WEBSITE:          http://kacarton.yeah.net/
’BLOG:                http://blog.csdn.net/nhconch
’EMAIL:              kacarton@sohu.com

’本对象中使用了set_var、set_block等命名方法是为了兼容phplib
’文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持!
’================================================================

Class kktTemplate
   
     Private m_FileName, m_Root, m_Unknowns, m_LastError, m_HaltOnErr
     Private m_ValueList, m_BlockList
     Private m_RegExp    
     构造函数
     Private Sub Class_Initialize
         Set m_ValueList     = CreateObject( "Scripting.Dictionary")
         Set m_BlockList     = CreateObject( "Scripting.Dictionary")
         set m_RegExp        = New RegExp
         m_RegExp.IgnoreCase = True
         m_RegExp.Global     = True
         m_FileName          =  ""
         m_Root              =  ""
         m_Unknowns          =  "remove"
         m_LastError         =  ""
         m_HaltOnErr         = true
     End Sub
   
     ’析构函数
     Private Sub Class_Terminate
         Set m_RegExp       = Nothing
         Set m_BlockMatches = Nothing
         Set m_ValueMatches = nothing
     End Sub
   
     Public Property Get ClassName()
         ClassName =  "kktTemplate"
     End Property
   
     Public Property Get Version()
         Version =  "1.0"
     End Property
   
     Public Sub About()
         Response.Write( "kktTemplate ASP页面模板类<br>" & vbCrLf &_
                        "程序设计:彭国辉 2004-07-05<br>" & vbCrLf &_
                        "个人网站:<a href=’http://kacarton.yeah.net’>http://kacarton.yeah.net</a><br>" & vbCrLf &_
                        "电子邮件:<a href=’mailto:kacarton@sohu.com’>kacarton@sohu.com</a><br>")
     End Sub 
    
     检查目录是否存在
     Public Function FolderExist(ByVal path)
         Dim fso
         Set fso = CreateObject( "Scripting.FileSystemObject")
         FolderExist = fso.FolderExists(Server.MapPath(path))
         Set fso = Nothing
     End Function 
     读取文件内容
     Private Function LoadFile()
         Dim Filename, fso, hndFile
         Filename = m_Root
         If Right(Filename, 1) <>"/" And Right(Filename, 1)<>"\" Then Filename = Filename & "/"
         Filename = Server.MapPath(Filename  & m_FileName)
         Set fso = CreateObject( "Scripting.FileSystemObject")
         If Not fso.FileExists(Filename) Then ShowError( "模板文件" & m_FileName & "不存在!")
         set hndFile = fso.OpenTextFile(Filename)
         LoadFile = hndFile.ReadAll
         Set hndFile = Nothing
         Set fso = Nothing
         If LoadFile =  "" Then ShowError("不能读取模板文件" & m_FileName & "或文件为空!")
     End Function 
    
    处理错误信息
     Private Sub ShowError(ByVal msg)
         m_LastError = msg
         Response.Write  "<font color=red style=’font-size;14px’><b>模板错误:" & msg & "</b></font><br>"
         If m_HaltOnErr Then Response.End
     End Sub 
    
     设置模板文件默认目录
     ’Ex: kktTemplate.set_root( "/tmplate")
     ’   kktTemplate.Root =  "/tmplate"
     ’   root = kktTemplate.get_root()
     ’   root = kktTemplate.Root
     ’使用类似set_root这样的命名方法是为了兼容phplib,以下将不再重复说明
     Public Sub set_root(ByVal Value)
         If Not FolderExist(Value) Then ShowError(Value  & "不是有效目录或目录不存在!")
         m_Root = Value
     End Sub
     Public Function get_root()
         get_root = m_Root
     End Function
     Public Property Let Root(ByVal Value)
         set_root(Value)
     End Property
     Public Property Get Root()
         Root = m_Root
     End Property 
    
     设置模板文件
     ’Ex: kktTemplate.set_file( "hndTpl", "index.htm")
     ’本类不支持多模板文件,handle为兼容phplib而保留
     Public Sub set_file(ByVal handle,ByVal  filename)
         m_FileName = filename
         m_BlockList.Add Handle, LoadFile()
     End Sub
     Public Function get_file()
         get_file = m_FileName
     End Function
’    Public Property Let File(handle, filename)
’        set_file handle, filename
’    End Property
’    Public Property Get File()
’        File = m_FileName
’    End Property
   
     ’设置对未指定的标记的处理方式,有keep、remove、comment三种
     Public Sub set_unknowns(ByVal unknowns)
         m_Unknowns = unknowns
     End Sub
     Public Function get_unknowns()
         get_unknowns = m_Unknowns
     End Function
     Public Property Let Unknowns(ByVal unknown)
         m_Unknowns = unknown
     End Property
     Public Property Get Unknowns()
         Unknowns = m_Unknowns
     End Property
   
     Public Sub set_block(ByVal Parent, ByVal BlockTag, ByVal Name)
         Dim Matches
         m_RegExp.Pattern =  "<!--\s+BEGIN " & BlockTag & "\s+-->([\s\S.]*)<!--\s+END " & BlockTag & "\s+-->"
         If Not m_BlockList.Exists(Parent) Then ShowError( "未指定的块标记" & Parent)
         set Matches = m_RegExp.Execute(m_BlockList.Item(Parent))
         For Each Match In Matches
             m_BlockList.Add BlockTag, Match.SubMatches(0)
             m_BlockList.Item(Parent) = Replace(m_BlockList.Item(Parent), Match.Value,  "{" & Name & "}")
         Next
         set Matches = nothing
     End Sub
   
     Public Sub set_var(ByVal Name, ByVal Value, ByVal Append)
         Dim Val
         If IsNull(Value) Then Val =  "" Else Val = Value
         If m_ValueList.Exists(Name) Then
             If Append Then m_ValueList.Item(Name) = m_ValueList.Item(Name)  & Val _
             Else m_ValueList.Item(Name) = Val
         Else
             m_ValueList.Add Name, Value
         End If
     End Sub
   
     Public Sub unset_var(ByVal Name)
         If m_ValueList.Exists(Name) Then m_ValueList.Remove(Name)
     End Sub
   
     Private Function InstanceValue(ByVal BlockTag)
         Dim keys, i
         InstanceValue = m_BlockList.Item(BlockTag)
         keys = m_ValueList.Keys
         For i=0 To m_ValueList.Count-1
             InstanceValue = Replace(InstanceValue,  "{" & keys(i) & "}", m_ValueList.Item(keys(i)))
         Next
     End Function
   
     Public Sub parse(ByVal Name, ByVal BlockTag, ByVal Append)
         If Not m_BlockList.Exists(BlockTag) Then ShowError( "未指定的 块标记" & Parent)
         If m_ValueList.Exists(Name) Then
             If Append Then m_ValueList.Item(Name) = m_ValueList.Item(Name)  & InstanceValue(BlockTag) _
             Else m_ValueList.Item(Name) = InstanceValue(BlockTag)
         Else
             m_ValueList.Add Name, InstanceValue(BlockTag)
         End If
     End Sub
   
     Private Function finish(ByVal content)
         Select Case m_Unknowns
             Case  "keep" finish = content
             Case  "remove"
                 m_RegExp.Pattern =  "\{[^ \t\r\n}]+\}"
                 finish = m_RegExp.Replace(content,  "")
             Case  "comment"
                 m_RegExp.Pattern =  "\{([^ \t\r\n}]+)\}"
                 finish = m_RegExp.Replace(content,  "<!-- Template Variable $1 undefined -->")
             Case Else finish = content
         End Select
     End Function
   
     Public Sub p(ByVal Name)
         If Not m_ValueList.Exists(Name) Then ShowError( "不存在的标记" & Name)
         Response.Write(finish(m_ValueList.Item(Name)))
     End Sub
End Class
%>

copyright©2010-2014 西安久博网络科技有限公司 All Right Reserved 陕ICP备11012006号-1
★久博网络★西安网络公司 | 西安网站建设 | 高端品牌网站建设 | 西安手机网站建设 | 西安APP开发
西安久博网络网站建设

用微信扫一扫