ASP一个仿phplib的模板类

80酷酷网    80kuku.com

  模板   用php用惯了,用phplib用惯了,没有他觉得很不舒服
  上网查找没有人写,自己写了一个,asp水平不高,希望
  能有高手指点修改。
  <%
  ' ====================================
  ' Name: Template Class
  ' Purpose: Parse and output HTML page
  ' Date: 10.2002
  ' Author: pig
  ' Email: pigzjqsina.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

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: