个仿phplib的模板类

网络整理 - 07-26
用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+"http://www.cuoxin.com/"+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 bgcolor='#f0f0f0'>
{TEST}
</td></tr>
<!-- END block_test -->
</table>

希望对用惯了phplib中的强大功能的朋友能有所帮助
我希望交接所有php以及asp的爱好者
我的qq:9457009