分享
 
 
 

一个仿phplib的模板类

王朝php·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

用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,"")

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)

%>

模板文件:

<table border=1>

<!-- BEGIN block_test -->

<tr><td width='250' class='h1' height='40' bgcolor='#f0f0f0' align='center'>

</td></tr>

<!-- END block_test -->

</table>

希望对用惯了phplib中的强大功能的朋友能有所帮助

我希望交接所有php以及asp的爱好者

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有