您所在的位置:小祥子 » 编程 » ASP » 正文

ASP仿phplib的模板类

时间:2015-01-16 编辑:佚名 来源:互联网

PHP有很多模板类的代码,但ASP则很少有,今天为大家分享一个ASP的模板类。

通俗的来说,就是ASP文件加载一个公用的模板类,然后读取模板文件,通过很简单的几句代码对模板文件里的标签进行替换,替换成数据库里的内容。

类的代码如下
 class Template
     dim gs_root
     dim gs_handle()
     dim gs_file()
     dim gs_keys()
     dim gs_keyVars()
     dim gs_vars()
 
    '构造函数
     Private Sub Template_Initialize()
         call of_setRoot(".")
         'call of_redimVar()
     End Sub
    
    function of_redimVar()
         redim gs_handle(0)
         redim gs_file(0)
         redim gs_keys(0)
         redim gs_keyVars(0)
         redim gs_vars(0)
     end function
 
    '设置模板存放路径
     function of_setRoot(byVal ps_root)
         if ps_root <> "" then
             gs_root = ps_root
         end if
     end function
 
    '设置文件名称函数
     function of_setFile(byVal ps_fileHandle,byVal ps_fileName)
         if ps_fileName <> "" then
             li_maxNum=UBound(gs_handle)
             gs_handle(li_maxNum)    = ps_fileHandle
             gs_file(li_maxNum)        = gs_root+"/"+ps_fileName
 
            li_maxNum=li_maxNum+1
             redim Preserve gs_handle(li_maxNum)
             redim Preserve gs_file(li_maxNum)
         end if
     end function
 
    '设置要替换的参数变量
     function of_setVar(byVal ps_key,byVal ps_var)
         if ps_key <> "" and ps_var <> "" then
             li_keyIndex=of_getIndex(gs_keys,ps_key)
             if li_keyIndex="no" then
                 li_maxNum=UBound(gs_keys)
                 gs_keys(li_maxNum)=ps_key
                 gs_keyVars(li_maxNum)="{" & ps_key & "}"
                 gs_vars(li_maxNum)=ps_var
                
                li_maxNum=li_maxNum+1
                 redim Preserve gs_keys(li_maxNum)
                 redim Preserve gs_keyVars(li_maxNum)
                 redim Preserve gs_vars(li_maxNum)
             else
                 gs_keys(li_keyIndex)=ps_key
                 gs_keyVars(li_keyIndex)="{" & ps_key & "}"
                 gs_vars(li_keyIndex)=ps_var
             end if
         end if
     end function
 
    '定义重载文字块儿
     function of_setBlock(byVal ps_parent,byVal ps_handle,byVal ps_name)
         if (not of_loadFile(ps_parent)) then
             ls_error="of_loadFile unable to load "+ps_parent
             response.write(ls_error)
             of_setBlock=false
             exit function
         end if
 
        if ps_name="" then
             ps_name=ps_handle
         end if
 
        ls_string=of_getVar(ps_parent)
         ls_pattern = "<!--s*BEGIN "&ps_handle&"s*-->(.*)<!--s*END "&ps_handle&"s*-->"
 
        Set regEx = New RegExp
         regEx.Pattern = "n"
         regEx.IgnoreCase = false
         regEx.global = true
         ls_string = regEx.Replace(ls_string,"")
 
        regEx.Pattern = ls_pattern
         regEx.Multiline = true
         regEx.global = false
         Set Matches = regEx.Execute(ls_string)
         ls_string = regEx.Replace(ls_string,"{"&ps_name&"}")
 
        For Each Match in Matches   
            ls_value=Match.value
         Next
 
        regEx.Pattern = "<!--s*BEGIN "&ps_handle&"s*-->"
         regEx.IgnoreCase = false
         regEx.global = true
         ls_value = regEx.Replace(ls_value,"")
 
        regEx.Pattern = "<!--s*END "&ps_handle&"s*-->"
         regEx.IgnoreCase = false
         regEx.global = true
         ls_value = regEx.Replace(ls_value,"")
 
        call of_setVar(ps_handle,ls_value)
         call of_setVar(ps_parent,ls_string)
     end function
 
    '装载变量内容
     function of_loadFile(byVal ps_handle)
         li_keyIndex=of_getIndex(gs_keys,ps_handle)
         if li_keyIndex = "no" then
             li_fileIndex=of_getIndex(gs_handle,ps_handle)
             if li_fileIndex = "no" then
                 ls_error="loadfile:"+ps_handle+" is not a valid handle."
                 response.write(ls_error)
                 of_loadFile=false
                 exit function
             end if
 
            ls_fileName=gs_file(li_fileIndex)
             ls_fileName=server.mappath(ls_fileName)
             Set MyFileObject=Server.CreateObject("Scripting.FileSystemObject")
             li_exist=MyFileObject.FileExists(ls_fileName)
             if li_exist then
                Set MyTextFile=MyFileObject.OpenTextFile(ls_fileName)
                 ls_file=MyTextFile.readAll()
                 MyTextFile.Close
                 call of_setVar(ps_handle,ls_file)
             else
                 ls_error="loadfile:"+ls_fileName+" is not a valid file or path."
                 response.write(ls_error)
                 of_loadFile=false
                 exit function
             end if
         end if
 
        of_loadFile=true
     end function
 
    '变量替换过程
     function of_replace(byval ps_handle)
         if (not of_loadFile(ps_handle)) then
             ls_error="of_replace: unable to load "+ps_handle
             response.write(ls_error)
             of_replace=false
             exit function
         end if
 
        ls_str=of_getVar(ps_handle)
         li_minIndex=LBound(gs_keys)
         li_maxIndex=UBound(gs_keys)
        
         for i=li_minIndex to li_maxIndex
             Set regEx = New RegExp
             regEx.Pattern = gs_keyVars(i)
             regEx.IgnoreCase = True
             ls_str = regEx.Replace(ls_str, gs_vars(i))
         next
 
        of_replace=ls_str
     end function
    
    '获取存储变量
     function of_getVar(byval ps_keyName)
         li_keyIndex=of_getIndex(gs_keys,ps_keyName)
         if(li_keyIndex="no") then
             of_getVar=""
         else
             ls_varName=gs_vars(li_keyIndex)
             of_getVar=ls_varName
         end if
     end function
 
    '查找数组中相应字符串的索引值
     function of_getIndex(byval ps_array,byval ps_handle)
         li_minIndex=LBound(ps_array)
         li_maxIndex=UBound(ps_array)
         li_index="no"
         for i=li_minIndex to li_maxIndex
             if (ps_array(i)=ps_handle) then
                 li_index=i
                 exit for
             end if
         next
         of_getIndex=li_index
     end function
 
    '分析变量
     function of_parse(byval ps_target,byval ps_handle,byval ps_append)
         ls_string = of_replace(ps_handle)
         if ps_append=true then
             ls_org = of_getVar(ps_target) & ls_string
 
            'if pi_time=2 then
             '    response.write(ls_string)
             '    exit function
             'end if
 
            call of_setVar(ps_target,ls_org)
         else
             call of_setVar(ps_target,ls_string)
         end if
     end function
    
    function of_print(byval ps_keyName)
         li_keyIndex=of_getIndex(gs_keys,ps_keyName)
         ls_varString=gs_vars(li_keyIndex)
 
        Set regEx = New RegExp
         regEx.Pattern = "{[^ trn}]+}"
         regEx.IgnoreCase = True
         ls_varString = regEx.Replace(ls_varString, "")
         of_print=ls_varString
     end function
 end class
调用页面:
 <%
 dim c_html
 set c_html = new Template
 
call c_html.of_redimVar()
 call c_html.of_setFile("main","index.htm")
 call c_html.of_setBlock("main","block_test","myTest")
 
call c_html.of_setVar("TEST","testblock1")
 call c_html.of_parse("myTest","block_test",true)
 call c_html.of_setVar("TEST","testblock2")
 call c_html.of_parse("myTest","block_test",true)
 
call c_html.of_setVar("TEST1","success")
 call c_html.of_parse("MAIN_OUTPUT","main",false)
 ls_result=c_html.of_print("MAIN_OUTPUT")
 response.write(ls_result)
 %>
 
模板文件:
 {TEST1}
 <table border=1>
 <!-- BEGIN block_test -->     
 <tr><td width='250' class='h1' height='40' bgcolor='#f0f0f0' align='center'>
     {TEST}
 </td></tr>
 <!-- END block_test -->
</table>
 

关键词:模板类 PHPLIB