发新话题
打印

一个仿phplib的模板类

一个仿phplib的模板类


用php用惯了,用phplib用惯了,没有他觉得很不舒服
9 `  _: f  t7 ]6 y3 d1 V5 s4 m上网查找没有人写,自己写了一个,asp水平不高,希望
( W5 t2 R; f6 D6 r1 V能有高手指点修改。3 t1 r& {# i6 Y/ l5 T# H) S/ f
%, z! d' [+ M0 B! r
' ====================================
4 u) s9 _4 ]8 c# X9 Z5 I' Name: Template Class7 G" |7 r( W# l- |% S
' Purpose: Parse and output HTML page
: |7 @4 k% u2 [" @# N' Date: 10.2002" D2 U! p! m5 @+ B7 P7 T
' Author: pig
6 |" O7 Q1 r$ r' Email: pigzjq@sina.com5 }; `3 {2 U; B. U% ]: h
' Phone: 13910320759# ?5 W# g% W$ x# h1 J  G0 |2 w" o
' ====================================
* r* E  m# S0 g9 W. O
' _, j" M) g3 F  
3 t+ s& A1 s2 s# w0 S1 x0 G3 z' P5 O3 x9 H8 Q& c9 B
class Template
2 C% D: Y9 a: B$ A1 N- kdim gs_root% B. ~: B  Z7 H1 d
dim gs_handle()& i, j; Q* F$ _. d% J1 z4 X4 D* C
dim gs_file()+ e: Z  A6 T+ `/ p) x. I  G) R0 s  N
dim gs_keys()
% h4 I- f) p: Z+ ^+ Ldim gs_keyVars()9 ?+ p8 v" D# g: r3 i
dim gs_vars()  
7 r/ G: N9 ^) Z9 _# r. k
4 T$ Z4 G2 b6 I* J  b! Y4 p'构造函数: T7 z% s0 r- l4 J: k. ~) _
Private Sub Template_Initialize()
; r: c+ C9 v" C7 q% M% b7 Ycall of_setRoot(".")
7 ^8 Q& M/ h, X'call of_redimVar()
. y+ Y1 R' L/ @1 Q0 t0 TEnd Sub
+ x& ~! f% }4 [1 V' y) Z  Z4 S; q( f# ?8 p+ `9 u/ v* o
function of_redimVar()! a) J$ b9 X. q% _1 _& p% H- Z, v
redim gs_handle(0)
- I: A# s# I% j! ?8 }) Gredim gs_file(0)
$ T2 E) y- C  D" n/ s% v1 W9 I: fredim gs_keys(0)2 V3 T& D' O- g
redim gs_keyVars(0)% F7 w) Z1 M" k
redim gs_vars(0)# p) B: \& i: s
end function  
( i& Q/ ]$ A2 G3 |1 y8 y+ h- ~* i$ Z2 C$ z
'设置模板存放路径
5 ~; i: F2 R+ _function of_setRoot(byVal ps_root)
0 \# M' g% p! Q( Pif ps_root  "" then
" J& x8 j) U$ y. d$ s& S0 m  i- H1 `- e) Fgs_root = ps_root
% s1 S, a6 v, T7 f) Dend if
6 i; d9 X8 a7 p& z5 U/ r( nend function  ; O$ h7 ^2 y2 N/ S
+ F" k, T' W; S4 g
'设置文件名称函数
/ W" ~  K& D; c0 N2 t+ H- Pfunction of_setFile(byVal ps_fileHandle,byVal ps_fileName)9 i% x. j( d  v1 @% c
if ps_fileName  "" then$ W4 d) m, N& C& Q0 |# Y8 {" ]
li_maxNum=UBound(gs_handle)( c, O" }1 y' @4 ^4 m
gs_handle(li_maxNum) = ps_fileHandle( R2 t' f: V8 ?) ]$ E% N  W
gs_file(li_maxNum) = gs_root "/" ps_fileName  1 K# p! Q  w- ^0 O/ ?) r& _, H+ E2 [

- G1 W' v* A: T0 v2 jli_maxNum=li_maxNum 13 \5 D2 T( [9 F& O/ O6 J0 E
redim Preserve gs_handle(li_maxNum)
$ v# Z2 ~: d& b+ d/ |) Z' Kredim Preserve gs_file(li_maxNum)
) j) H, H3 j( q" Wend if
  I( w) |0 p. J( tend function  6 i2 f% q; G2 F- s  _; g& v2 D
( q* t, @+ ?7 ^
'设置要替换的参数变量
7 s+ {/ }2 h: K3 l; [function of_setVar(byVal ps_key,byVal ps_var)
. }& A: U, l" E7 E) F6 D; Mif ps_key  "" and ps_var  "" then
2 v0 k( I2 e! Jli_keyIndex=of_getIndex(gs_keys,ps_key)
  q$ I* D2 I, u7 Hif li_keyIndex="no" then
% y& H3 U, I! z3 ]+ f  o! X' ~/ J( |li_maxNum=UBound(gs_keys)
. p1 ~4 o  U$ X9 t  Y6 rgs_keys(li_maxNum)=ps_key$ l& G4 m8 h# b: ?8 Z. Z% c
gs_keyVars(li_maxNum)="\{"  ps_key  "\}"
* M8 g: X+ G* X) jgs_vars(li_maxNum)=ps_var
3 B7 O" p, G: f+ p
6 z/ `( i; R5 G# V( l: lli_maxNum=li_maxNum 1
3 d! x3 j; g* U4 z0 T7 F" u( Sredim Preserve gs_keys(li_maxNum)5 \0 A: D7 G* m! s5 }' f& P
redim Preserve gs_keyVars(li_maxNum)
6 a7 q# A/ I! @" oredim Preserve gs_vars(li_maxNum)) Q! |2 x* l; t* v
else
: [; G9 A' l+ i7 }6 D7 ~& Ags_keys(li_keyIndex)=ps_key
: j) m6 r0 }6 m, B$ Ogs_keyVars(li_keyIndex)="\{"  ps_key  "\}"
4 h. {' r/ l  T. ugs_vars(li_keyIndex)=ps_var: T0 D/ s( ~% E8 ^7 Q$ R) ^: F
end if
- q/ E& T7 T$ g& W. }/ U7 P$ pend if
7 j2 X8 b2 D  X8 z0 xend function  , L4 |$ [9 l2 o% [5 m7 F6 S3 g
( F2 L+ M* t% j1 i0 V: m
'定义重载文字块儿0 t, e6 W6 o  B/ {4 Q0 P" F
function of_setBlock(byVal ps_parent,byVal ps_handle,byVal ps_name)
1 P' k1 n: H: }! t* m8 U4 s* M8 T0 ~if (not of_loadFile(ps_parent)) then* y8 B/ V; h' z- U
ls_error="of_loadFile unable to load " ps_parent0 K0 ?2 M- d' R* C8 c
response.write(ls_error)
+ K+ [8 ~6 p" \7 F; F; hof_setBlock=false
% c1 C4 d1 \, K; [exit function: I& e. r1 _, C# a8 N+ X5 s
end if  9 J: ^5 {! Q: @

! G4 A/ Y; W/ N" I( u$ Gif ps_name="" then
+ y3 I: x: S% l7 O" X: ~5 @ps_name=ps_handle# v1 U/ Q; t7 r# u6 W+ d
end if  9 F$ E% L5 |6 H
5 H1 o1 G0 a. Q& e& B/ f! s: s4 g
ls_string=of_getVar(ps_parent)3 ~# g1 _4 c- j9 L  f: \- f
ls_pattern = "!--\s*BEGIN "ps_handle"\s*--(.*)!--\s*END "ps_handle"\s*--"  3 M! _$ d% M0 m4 R' [

1 n- K! N$ R' Q* E0 m. D0 f' wSet regEx = New RegExp
) Z% K% L1 v9 I+ nregEx.Pattern = "\n"3 M! g" R/ B1 B
regEx.IgnoreCase = false, `- I& B1 k2 u; C  `
regEx.global = true9 w0 p7 L9 c6 B
ls_string = regEx.Replace(ls_string,"")  + r, a- u) I: m$ s5 B( q2 s* ^
' x" @4 l" R. \
regEx.Pattern = ls_pattern
; }+ C1 |3 o5 ~- H$ Y( z9 r5 kregEx.Multiline = true
9 J  n6 ]+ t/ o  u/ ~regEx.global = false: q/ d) x- N) ?1 u1 B! `
Set Matches = regEx.Execute(ls_string)
; a7 s, u2 H0 a1 nls_string = regEx.Replace(ls_string,"{"ps_name"}")  
" i4 q/ \$ E5 _! k; L5 O
5 ]9 J5 J6 }) t3 J. NFor Each Match in Matches 8 k& Z: u0 X- i# ~. v. e& X. R3 B
ls_value=Match.value
2 ^5 d& @' W/ u; z5 d! U2 cNext  
# I1 Z6 b2 p& r2 G; a5 V5 G- A' ]8 F& f
regEx.Pattern = "!--\s*BEGIN "ps_handle"\s*--"' [( g* p; w* X5 x$ ?$ ~4 W5 Q
regEx.IgnoreCase = false
- i; ~5 S5 I% x7 k% ^! n( F8 B  aregEx.global = true1 s9 H2 N2 Y) ~) M' N  V+ z
ls_value = regEx.Replace(ls_value,"")  
! V2 u" i  x3 `. K( a" T# i1 m$ D' P
regEx.Pattern = "!--\s*END "ps_handle"\s*--"
* y5 T$ E+ Y/ B; N# o& c8 q0 l: kregEx.IgnoreCase = false
+ X) I, w) V8 K; lregEx.global = true# c' E& V  O! [  a5 p1 V
ls_value = regEx.Replace(ls_value,"")  " z: F7 C1 i0 _6 r8 K9 u

' O; }( p( P) [call of_setVar(ps_handle,ls_value)8 F4 y* v/ b$ @1 A: |4 A
call of_setVar(ps_parent,ls_string)) I! T& N% M; W/ |- v& d/ K
end function  / G9 x4 c5 u5 ?6 {* |9 b; |7 [
( ~5 h, G/ g5 r: F
'装载变量内容/ _3 p& \8 j$ b/ X( ?; F
function of_loadFile(byVal ps_handle)2 s6 ~( D4 y$ L, A7 V
li_keyIndex=of_getIndex(gs_keys,ps_handle)! l( D9 n9 N3 `  ?& x( t
if li_keyIndex = "no" then
$ a: T* j; |, O( L8 C# X& pli_fileIndex=of_getIndex(gs_handle,ps_handle)8 ^- S4 B: a- z6 {. p
if li_fileIndex = "no" then0 y' }2 s+ A1 U; X1 d1 p3 i, a  c
ls_error="loadfile:" ps_handle " is not a valid handle."! E. B( J0 U* j0 {. ]
response.write(ls_error)) @* @6 @& e  u' d9 u0 W3 _
of_loadFile=false
- p* @/ z# X  @exit function
6 h! r( s8 d7 H/ }, j$ H7 y; Wend if  6 E# U. M3 ~2 M$ ?: k& x+ e& n
* W* w) v; }0 c2 c. G& ]3 G' G6 K
ls_fileName=gs_file(li_fileIndex)2 y! E/ L" }! v- m) N) O* O7 g
ls_fileName=server.mappath(ls_fileName)5 e9 V5 r3 A/ H' l% N* O
Set MyFileObject=Server.CreateObject("Scripting.FileSystemObject")
( L3 F, o% `+ B3 R0 v, g1 M# K7 B: bli_exist=MyFileObject.FileExists(ls_fileName)
- L9 ^/ u% a' o4 D  A/ Tif li_exist then
0 v' k" u* Z' v, ]8 n; S# KSet MyTextFile=MyFileObject.OpenTextFile(ls_fileName)& n. X2 k; }4 a' U& C; [# q3 {0 E' j
ls_file=MyTextFile.readAll()9 |, L9 W4 y5 ?$ N
MyTextFile.Close
( E4 G% N+ {1 `1 z' V' Z$ q  Acall of_setVar(ps_handle,ls_file)
6 l+ t+ ^4 Z# M0 w% `5 B) c+ Felse
" n# Q* e7 t7 ]. kls_error="loadfile:" ls_fileName " is not a valid file or path."6 Z; ?# o0 A, k# H! ]; H
response.write(ls_error)
  o6 K# H6 J. G' F- C9 f) q6 Rof_loadFile=false
, A8 m5 \1 K& P" w" zexit function
# m* \2 p) T! v: Iend if# ^. G" m3 a$ G9 _# i# M* O
end if  
' _9 Z2 u: i* H2 U* \- l0 A; c2 A$ m: S) ^- |  d
of_loadFile=true3 ^2 i* p8 b# N8 B- b6 V3 v
end function  
6 k& @0 m# W5 u. N4 A  x8 k* j# E! a+ |5 f; R6 U8 }
'变量替换过程
; }/ r$ Q4 z& r3 Pfunction of_replace(byval ps_handle)
- l8 p/ q. q" l  Qif (not of_loadFile(ps_handle)) then
, ~& {+ Q* i6 f4 L( kls_error="of_replace: unable to load " ps_handle3 Y, S- |* \- r$ t) l. A
response.write(ls_error)/ T2 }, G+ R% T. n) s1 t% t/ r# B
of_replace=false
4 _+ c2 k2 S: U! Q& p; Kexit function. z2 ?: Z* [3 f7 }8 P; P7 O+ i
end if  
5 @7 M: Z9 a9 y- u* @; F, W) P  h, D- |/ ?* q; H7 W. B7 K
ls_str=of_getVar(ps_handle)$ e! Z- W8 q+ a" F
li_minIndex=LBound(gs_keys)/ A+ ^9 _" ?6 y+ m% o, G6 }
li_maxIndex=UBound(gs_keys)5 Z* ^  q5 h/ }4 |8 g" {, e
2 Y  b0 V1 g3 p: Z1 Q, {2 [/ }
for i=li_minIndex to li_maxIndex2 y6 `1 ^* I+ U9 C' v
Set regEx = New RegExp, J, D5 c) h/ j% b1 O0 r0 L
regEx.Pattern = gs_keyVars(i)+ W" y- X5 d7 r- g
regEx.IgnoreCase = True0 M; }+ g8 _2 u3 A2 K
ls_str = regEx.Replace(ls_str, gs_vars(i))' j. b0 h3 X# [
next  " K( o9 N6 Q5 v5 L( `

8 G! c4 G: Z& b5 R% Kof_replace=ls_str
5 I, i. _* V$ {- Oend function- N# u% L4 E$ h* H& ]0 ?& I  a

* p8 L. M$ P+ c3 m5 k% m1 _* o6 t'获取存储变量( A+ e9 C5 d& ~5 C+ f/ ^) x
function of_getVar(byval ps_keyName)) @" S2 ?6 `. u. `1 x( m
li_keyIndex=of_getIndex(gs_keys,ps_keyName)
4 K6 W. n, y( I5 _, u# gif(li_keyIndex="no") then1 B* Q8 `  o9 r3 [/ W
of_getVar=""" ]0 Z$ C1 X+ U/ G5 ^9 r6 f/ Y% N
else
. h) Z: W6 v5 l- w$ J# els_varName=gs_vars(li_keyIndex)
- s7 U6 Y' ]0 a; ^$ m5 lof_getVar=ls_varName
. ~% B1 n2 V% y) |  {1 Wend if# J+ V% [& ~8 C6 z; ^3 M9 ~0 m
end function  3 A3 G3 e, c4 T' v9 w

% b8 `. I, k; ?'查找数组中相应字符串的索引值
" J1 N# h/ e* e$ Z% @function of_getIndex(byval ps_array,byval ps_handle)8 a" T1 u- ^6 L0 ]7 W+ _1 v' n
li_minIndex=LBound(ps_array)
1 D0 Y3 |7 u. c0 Uli_maxIndex=UBound(ps_array)
/ z  u; g5 _0 q  l0 k# dli_index="no"
. l" e, x- v4 W8 r1 C9 `for i=li_minIndex to li_maxIndex: Z- n, y6 L5 V- V8 ~9 c* J
if (ps_array(i)=ps_handle) then6 J- J1 o5 `- J/ v
li_index=i) |3 G, z8 z9 n7 f6 ]
exit for
  D8 ~; y7 m7 fend if" m3 h- L) y; m" e
next- b/ i; E- h+ g4 d- T
of_getIndex=li_index. D9 ~- [, w5 K3 g
end function  $ R+ ~$ i, T. N" U6 }
6 z6 |4 d: b9 p, K
'分析变量  t% k8 V2 A2 ]4 e" k# Y
function of_parse(byval ps_target,byval ps_handle,byval ps_append)
* p* s/ `0 i6 x: O* zls_string = of_replace(ps_handle)3 N$ B( c& E* ?" p
if ps_append=true then
8 w: C) Y* U$ Y% d; l6 Ils_org = of_getVar(ps_target)  ls_string  : c7 ~0 {6 G/ V9 l2 I1 V
8 w/ ]* d: @0 m5 O9 g% J" I# ]' D' ~' w
'if pi_time=2 then
& U$ L7 k- [- ]9 V! F7 S, \' response.write(ls_string)
+ ?& g5 V4 b; [- U, p' exit function# Q* d% P8 I6 K7 h; ?" t0 l
'end if  & T+ P7 a* H, n& c. A, f+ \

# _: D1 b% M8 C. o5 t7 ecall of_setVar(ps_target,ls_org)
) u  I$ [/ z" X( delse
/ k3 G4 k1 B  \1 rcall of_setVar(ps_target,ls_string)1 o) C) ~$ [: z
end if, x0 u$ B& x; ^6 _! x6 H
end function
' g! A& @- p: u6 l
7 O& d9 d0 L5 L4 c( I' _+ Jfunction of_print(byval ps_keyName)3 r- B3 e( S. ^0 P# ~
li_keyIndex=of_getIndex(gs_keys,ps_keyName)
- R6 L6 O) j( i& f  Q# pls_varString=gs_vars(li_keyIndex)  + ^( }6 O' {5 x; m
9 }2 s& d! w2 G
Set regEx = New RegExp2 t* Y5 F# P- D; C) D( J8 n1 m$ n
regEx.Pattern = "{[^ \t\r\n}] }"- \8 @* A* q0 m' m
regEx.IgnoreCase = True
# r# R& C) a5 X0 Jls_varString = regEx.Replace(ls_varString, "")
+ d& H  n7 ^/ t# ^+ c/ Zof_print=ls_varString- ^* O( P* o- z2 E
end function
6 Q; O3 w0 H, B* h( B" iend class  |% C4 H  j3 Q" T! L, {
%  $ L. y- V; w( o+ d$ l' {% i/ l. H: i

4 s  m1 w% U) z1 d) L: U, I调用页面:
* [! c3 J, h; e* K2 ^+ h1 m& l%
& P, F- W  Q$ L( ?% Ndim c_html' s. F* Q8 V5 F+ q- R$ P
set c_html = new Template  & Y7 ]0 {( H( ]+ q  O* t4 u3 U. u. G0 S
- X% m3 u9 j) X, D: U  ?/ K
call c_html.of_redimVar()
# r! b* n2 N6 ^( |, K6 z+ ucall c_html.of_setFile("main","index.htm")
; G" z0 \0 q; g" acall c_html.of_setBlock("main","block_test","myTest")  
* G; y8 T) k# r$ O- e8 m3 T
" t8 x! e( W* T- h( Hcall c_html.of_setVar("TEST","testblock1"). j" S: }9 I+ q" J1 O$ V
call c_html.of_parse("myTest","block_test",true)
/ n/ p6 ^5 T/ D/ dcall c_html.of_setVar("TEST","testblock2")
1 G4 s5 C0 f) I  v$ A8 X2 Wcall c_html.of_parse("myTest","block_test",true)  
) S( [2 K1 P3 K& f1 _' ~3 C$ P
4 y8 F- C7 @8 Bcall c_html.of_setVar("TEST1","success")
/ h2 N( T5 g8 `* `call c_html.of_parse("MAIN_OUTPUT","main",false)
2 ]8 ?; t) a7 [ls_result=c_html.of_print("MAIN_OUTPUT")
; p; b; _( W! o1 h4 F' aresponse.write(ls_result)+ [3 Y$ W1 c, P6 b5 g5 `4 U
%  
# K7 b9 e$ x+ c* y
1 F$ t8 H1 ^$ J4 n模板文件:
4 @! t0 E7 l# k) r1 [5 o{TEST1}
2 C2 t- O8 Z; D! m) w4 \1 ytable border=15 n+ D) @% Y) d6 Q( l$ u
!-- BEGIN block_test -- ( e! c) }# O9 J" O$ `
trtd width='250' class='h1' height='40' bgcolor='#f0f0f0' align='center'
7 T6 v" ~+ C& [5 Y& y{TEST}
* s9 [, y1 c! _% C! s2 F: v6 g& ~' r/td/tr2 o. t. I& R& I
!-- END block_test --2 x0 T% U: F$ U* m$ D
/table  + l, }( h, @6 x: T0 f

9 Y2 C4 L+ }  c7 L. Z- b. x1 L希望对用惯了phplib中的强大功能的朋友能有所帮助
: F8 }8 l) P7 o3 u9 g/ h我希望交接所有php以及asp的爱好者
. \9 W/ c2 h  y. G1 z+ }0 ?0 G我的qq:9457009



点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹

TOP

发新话题