ASP一個仿phplib的模板類

來源:互聯網
上載者:User
模板    用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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.