用php用惯了,用phplib用惯了,没有他觉得很不舒服 上网查找没有人写,自己写了一个,asp水平不高,希望 能有高手指点修改。 <% ' ==================================== ' Name: Template Class ' Purpose: Parse and output HTML page ' Date: 10.2002 ' Author: pig ' Email: pigzjq@sina.com ' Phone: 13910320759 ' ==================================== 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 = "{[^ \t\r\n}]+}" 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中的强大功能的朋友能有所帮助 我希望交接所有php以及asp的爱好者 我的qq:9457009
|