优秀的软件开发团队:深圳升蓝软件 数据库开发 .Net技术  |  ASP技术 PHP技术 JSP技术 应用技术类     
热门推荐
升蓝OA办公自动化系统
基于.Net技术的网络
协同办公环境
 
ASP基础
数据库相关
安全加密
全文检索
ASP应用
打印相关
客户端相关
XML相关
系统相关
正则表达式
ASP技巧
组件开发
脚本编码
FSO专题
邮件相关
远程脚本
性能优化
 
相关链接
深圳升蓝软件:系统集成、办公自动化平台、电子商务、电子政务、Web数据库、企业网站、游戏、手机应用程序、CDMA软件、电子出版物等,为客户提供优秀的解决方案
 
升蓝(www.hi-blue.com)为企业管理、政府办公提供成熟的、易于实施的IT技术服务,我们的解决方案包括OA办公自动化系统CRM客户关系管理系统ERP企业生产管理和订单管理系统电子政务系统、知识管理系统、企业门户、商业智能、工程项目管理等等...
 
电子政务解决方案
塑料/橡胶管理系统
知识管理系统简介
多媒体光盘方案
ERP企业资源管理
订单计划管理系统
PM工程项目管理系统
会员管理系统
相关资料下载
OA办公自动化系统
CRM客户关系管理系统
在线试用版本说明
OA 系统的用户手册
 
 
 
 
升蓝开发团队 > 技术资料 > ASP技术 > ASP应用 : 一个仿phplib的模板类

一个仿phplib的模板类


March 25,2004
用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 = "{[^ trn}]+}"
        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
数据库开发 | .Net技术 | ASP技术 | PHP技术 | JSP技术 | 应用技术类 | 升蓝开发小组
Copyright ? 2001-2004 Shenzhen Hi-blue Software Team 升蓝开发小组 All rights reserved