ASP的模板类,支持动态加载类及模板赋值

模板技术全解析:从代码泛型到自动化配置的工程实践 模板是一种将重复性工作抽象为可复用框架的核心技术概念,其原理在于通过预定义的结构和占位符,实现内容与逻辑的动态分离。在技术价值上,模板极大地提升了开发效率、保证了代码与配置的一致性,并降低了人为错误。其应用场景广泛,从编程语言中的泛型与元编程,到动态文本生成、办公自动化、学术排版以及运维配置管理,模板都扮演着关键角色。本文聚焦于C++模板、Python Jinja2、Excel与LaTeX模板等具体实现,深入探讨了如何利用模板化思维解决实际工程问题,例如通过Jinja2实现配置文件的批量生成,以及使用Zab 阅读详情

 

看见很多兄弟们的个人站还是用asp混合html方式,忍不住放出自己写的ASP的模板类,支持动态加载类及模板赋值。

 

<%
'*************************************************************
'* 视图类
'*************************************************************
'* @category  FlapSite
'* @package   Flap_Controller
'* @copyright Copyright (c) morphyyang.com
'* @license   MIT-license
'* @link      http://www.morphyyang.com/flapsite
'* @author    morphy morphyyang@163.com
'*************************************************************
Class Nis_View_Main

    '模板变量代码缓存
    '@access private
    '@var string
    Private strTplVars

    '模板扩展名称
    '@access private
    '@var string
    Private strTplExt

    '模板存放路径,当存在全局变量strTplPath时无效
    '@access private
    '@var string
    Private strTplPath

    '模板变量存放对象
    '@access private
    '@var object 对象Scripting.Dictionary
    Private objTplVars

    '请求类
    '@access private
    '@var Nis_Controller_Request
    Private objRequest

    '已经加载的类文件
    '@access private
    '@var array
    Private arrInclude(20)

    '已经加载的类对象实例
    '@access private
    '@var array
    Private arrClass(20)

    '*************************************************************
    '* 构造函数
    '* THEME_APP及THEME_ADMIN为全局常量
    '*************************************************************
    '* @access public
    '* @param  void
    '* @return void
    '*************************************************************
    Public Sub class_initialize()
        strTplVars = ""
        strTplExt  = ".tpl.asp"
        '初始化模板变量存储对象
        Set objTplVars = CreateObject("Scripting.Dictionary")
        '初始化模板存放路径
        Set objRequest = new Nis_Controller_Request
        '设置模板路径
        strTplPath = objRequest.getTplDir()
    End Sub

    '*************************************************************
    '* 设置模板扩展名
    '*************************************************************
    '* @access public
    '* @param string strExt 模板文件扩展名
    '* @return void
    '************************************************************* 
    Public Property Let tplExt(strExt)
        If IsEmpty(strExt) Then
            strExt = ".tpl.asp"
        End If
        strTplExt = strExt
    End Property

    '*************************************************************
    '* 设置模板路径
    '*************************************************************
    '* @access public
    '* @param string strPath 模板文件存放路径
    '* @return void
    '************************************************************* 
    Public Property Let tplPath(strPath)
        If IsEmpty(strPath) Then
            strPath = ""
        End If
        strTplPath = strPath
    End Property

    '*************************************************************
    '* 模板变量赋值
    '*************************************************************
    '* @access public
    '* @param string strKey 模板变量名称
    '* @param mixed mixDefault 模板变量值
    '* @return void
    '*************************************************************
    Public Sub assign(strKey, mixValue)
        Call objTplVars.add(strKey, mixValue)
    End Sub

    '*************************************************************
    '* 根据提供的类名称自动寻找所在文件并同时定义加载类
    '*************************************************************
    '* @access public
    '* @param  string strClass 类名称
    '* @param  string strFun 类成员名称
    '* @param  string arrParams 类成员参数
    '* @param  string strType 调用类成员类型
    '* @return void
    '*************************************************************
    Public Function tag(strClass,strFun,arrParams,strType)
        Dim objReg, strContent, intAspStart, intAspEnd
        Dim strInclude, strDim, intCount, intInclude
        Dim bolInclude : bolInclude = False
        '用来承载asp以外的内容,将忽略输出
        Dim strReturn : strReturn = ""
        '判断是否加载必须的类文件
        For intCount = 0 To UBound(arrInclude)
            If IsEmpty(arrInclude(intCount)) And IsEmpty(intInclude) Then
                intInclude = intCount
            End If
            If arrInclude(intCount) = strClass Then
                intInclude = intCount
                bolInclude = True
            End If
        Next
        If bolInclude = False Then
            '获取类所在地址
            strInclude = Replace(strClass,"_","/")
            strInclude = "/library/" & strInclude & ".asp"
            Dim strTemp : strTemp = objRequest.getBasePath
            If strTemp <> "" Then strInclude = "/" & strTemp & strInclude
            '初始化脚本文件实例
            strContent = readTextFile(strInclude, "utf-8")
            strDim = "Dim objTag" & strClass & " : " & "Set objTag" & strClass & " = new " & strClass &"" & Chr(13) & "Class"
            '分析类脚本
            Set objReg = new RegExp
            objReg.IgnoreCase = True '忽略大小写
            objReg.Global = False '匹配第一个Class
            objReg.pattern = "Class"
            intAspEnd = 1
            intAspStart = inStr(intAspEnd,strContent,"<%")+2
            Do While intAspStart > intAspEnd + 1
                strReturn = strReturn & Mid(strContent, intAspEnd, intAspStart - intAspEnd - 2)
                intAspEnd = inStr(intAspStart, strContent, "%/>") + 2
                Execute(objReg.replace(Mid(strContent, intAspStart, intAspEnd - intAspStart - 2),strDim))
                intAspStart = inStr(intAspEnd, strContent, "<%") + 2
            Loop
            strReturn = strReturn & Mid(strContent, intAspEnd) 
            Set objReg = Nothing
            arrInclude(intInclude) = strClass
            Execute("Set arrClass(intInclude) = objTag" & strClass)
        Else
            Execute("Dim objTag" & strClass & " : " & "Set objTag" & strClass & " = arrClass(intInclude)")
        End If
        '执行标签函数
        Dim mixExe, strTag
        If strType = "function" Then
            strTag = "mixExe = objTag" & strClass & "." & strFun & "("
        ElseIf strType = "sub" Then
            strTag = "Call objTag" & strClass & "." & strFun & "("
        Else<mce:script type="text/javascript" src="http://hi.images.youkuaiyun.com/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.youkuaiyun.com/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.youkuaiyun.com/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.youkuaiyun.com/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>
            Exit Function
        End If
        '分析参数,支持最多一维数组作为函数参数
        Dim intX : intX = UBound(arrParams)
        For intCount = 0 To intX
            If intCount = intX Then
                If IsArray(arrParams(intCount)) Then
                    Dim intSub, intY : intY =  UBound(arrParams(intCount))
                    strTag = strTag & "Array("
                    For intSub = 0 To intY
                        If intSub = intY Then
                            strTag = strTag & """" & arrParams(intCount)(intSub) & """"
                        Else
                            strTag = strTag & """" & arrParams(intCount)(intSub) & ""","
                        End If
                    Next
                    strTag = strTag & ")"
                Else
                    strTag = strTag & """" & arrParams(intCount) & """"
                End If
            Else
                If IsArray(arrParams(intCount)) Then
                    intY =  UBound(arrParams(intCount))
                    strTag = strTag & "Array("
                    For intSub = 0 To intY
                        If intSub = intY Then
                            strTag = strTag & """" & arrParams(intCount)(intSub) & """"
                        Else
                            strTag = strTag & """" & arrParams(intCount)(intSub) & ""","
                        End If
                    Next
                    strTag = strTag & "),"
                Else
                    strTag = strTag & """" &arrParams(intCount) & ""","
                End If
            End If
        Next
        strTag = strTag & ")"
        '加载类所在文件
        Execute(strTag)
        Execute("Set objTag" & strClass & " = Nothing")
        tag = mixExe
    End Function

    '*************************************************************
    '* 显示模板内容
    '*************************************************************
    '* @access public
    '* @param  string strTpl 模板文件名称
    '* @return void
    '*************************************************************
    Public Sub display(strTpl)
        Response.Write(fetch(strTpl))
    End Sub

    '*************************************************************
    '* 编译模板内容
    '*************************************************************
    '* @access public
    '* @param  string strTpl 模板文件名称
    '* @return string
    '*************************************************************
    Public Function fetch(ByVal strTpl)
        Dim objReg, strContent, intAspStart, intAspEnd
        Dim strReturn: strReturn = ""
        '增加扩展名
        strTpl = strTpl & strTplExt
        '获取完整模板路径
        If strTplPath <> "" Then strTpl = strTplPath & "/" & strTpl
        '初始化脚本文件实例
        strContent = readTextFile(strTpl, "utf-8")
        '分析asp脚本
        Set objReg = new RegExp
        objReg.IgnoreCase = True '忽略大小写
        objReg.Global = True '匹配所有
        objReg.pattern = "^/s*=|Response.Write"
        intAspEnd = 1
        intAspStart = inStr(intAspEnd,strContent,"<%")+2
        Do While intAspStart > intAspEnd + 1
            strReturn = strReturn & Mid(strContent, intAspEnd, intAspStart - intAspEnd - 2)
            intAspEnd = inStr(intAspStart, strContent, "%/>") + 2
            Execute(objReg.replace(Mid(strContent, intAspStart, intAspEnd - intAspStart - 2),"strReturn = strReturn & "))
            intAspStart = inStr(intAspEnd, strContent, "<%") + 2
        Loop
        strReturn = strReturn & Mid(strContent, intAspEnd) 
        Set objReg = Nothing
        fetch = strReturn
    End Function

    '*************************************************************
    '* 获取模板内容
    '*************************************************************
    '* @access public
    '* @param  string strFileUrl 文件地址
    '* @param  string strCharset 文件编码
    '* @return string
    '*************************************************************
    Private Function readTextFile(ByVal strFileUrl, strCharset)
        Dim strReturn, objStm
        If strFileUrl = "" OR IsNull(strFileUrl) Then 
            readTextFile = ""
            Exit Function 
        End If 
        strFileUrl = Server.MapPath(strFileUrl)
        Set objStm = Server.CreateObject("Adodb.Stream") 
        objStm.Type = 2
        objStm.mode = 3
        objStm.charset = strCharset
        objStm.open
        objStm.loadfromfile strFileUrl
        strReturn = objStm.readtext
        objStm.Close 
        Set objStm = Nothing
        readTextFile = strReturn
    End Function

    '*************************************************************
    '* 获取模板变量值
    '*************************************************************
    '* @access private
    '* @param  string strKey 模板变量名
    '* @return mixed
    '*************************************************************
    Private Function var(strKey)
        '释放变量内存
        If IsEmpty(objTplVars(strKey)) Then
            var = Null
        Else 
            var = objTplVars(strKey)
        End If
    End Function

    '*************************************************************
    '* 操作自定义数组
    '*************************************************************
    '* @access private
    '* @param  string strKey 模板变量名
    '* @return mixed
    '*************************************************************
    Public Function getArray(arrFrom,strKey)
        getArray = objRequest.getArray(arrFrom,strKey)
    End Function

    '*************************************************************
    '* 字符串断行
    '*************************************************************
    '* @access private
    '* @param  string strValue 字符串
    '* @param  integer intLen 断行长度
    '* @return mixed
    '*************************************************************
    Public Function wordBreak(strValue,intLen)
        Dim intStart,intEnd
        Dim intX,strReturn : strReturn =""
        Dim intLine : intLine = CInt(Len(strValue) / intLen)
        intStart = 1
        For intX = 1 To intLine
            strReturn = strReturn & Mid(strValue,intStart,intLen) & "<br/>"
            intEnd = intStart + intLen
            intStart = intEnd
        Next
        wordBreak = strReturn
    End Function

    '*************************************************************
    '* 析构函数
    '*************************************************************
    '* @access private
    '* @param void
    '* @return void
    '*************************************************************
    Private Sub class_terminate()
        Dim intCount
        '释放变量内存
        Set objTplVars = Nothing
        '释放内存池中所有对象
        For intCount = 0 To UBound(arrClass)
            If IsObject(arrClass(intCount)) Then
                Set arrClass(intCount) = Nothing
            End If
        Next
    End Sub
End Class
%>


 

Windows C++ DLL导出类的完整指南:从纯虚接口到实战避坑 动态链接库(DLL)是Windows平台实现代码复用和模块化开发的核心技术。其原理在于将编译后的二进制代码在运行时动态加载,供多个程序共享,从而提升资源利用率和部署灵活性。在C++开发中,DLL的技术价值尤为突出,它不仅能封装核心算法、优化内存占用,更是构建插件化系统和实现热更新的基础。然而,C++缺乏统一的ABI标准,直接导出类会面临名称修饰、内存布局不一致等兼容性挑战,常引发链接错误和运行时崩溃。为此,业界普遍采用纯虚接口工厂模式,通过定义稳定的二进制接口来规避ABI问题,确保跨模块调用的安全与高效。这 阅读详情

相关推荐

5、 使用过滤模板构建高效的搜索页面

本文详细介绍了如何使用ASP.NET Dynamic Data中的过滤模板构建高效的搜索页面,涵盖LINQ查询、动态查询、自定义过滤模板创建、分页加载以及处理复杂数据关系等内容,帮助开发者提升搜索功能的灵活性和用户体验。

weixin_31591833的博客 127

ASP Crazy 模版操作类(最简单的模板类、仅提供交流)

ASP Crazy 模版操作类(最简单的模板类、仅提供交流)

快速提升ASP.NET开发效率的代码生成器

本文还有配套的精品资源,点击获取 简介:ASP.NET动软代码生成器是一款专为提高ASP.NET项目开发效率的工具,能够自动生成基础代码,如数据访问层、业务逻辑层、表示层等,使开发者能更专注于业务逻辑和创新功能的实现。该工具基于.NET Framework,支持多种编程语言,通过配置数据库连接信息和模板,能够快速生成与数据库交互的相关代码,包括实体类、CRUD操作、验证规则...

weixin_42602368的博客 1320

Asp.net2.0轻量级模板开发架构和完整demo

使用模板在php和java里很普及。微软官方没有给我门提供类似php模板的工具类。应为aspx页面本身就是模板。控件也是模板,并且微软官方提供的接口之丰富,功能支持之多使他们没有必要在提供类似php模板之类的工具类库。 标准的aspx页面也是可以实现MVC的。但是有的时候会觉得MVC功能实现的不是很彻底。比如一个程序员和一个美工结合。可以对页面进行逻辑和外观上的改版。但是...

weixin_30443731的博客 158

asp动态网站模板

动态网站建设,Inherits="ST_GROUP.ST_WebForm1" %> Default

最好的ASP模板类Template

最好的ASP模板类Template要的来去

静态网页模板 web静态网页源码模板

在选择模板时,开发者需要考虑项目需求、用户体验、可定制性和可扩展性等因素,以确保所选模板能够满足项目的实际需求。静态网页模板与Web静态网页源码模板的深入解析,在Web开发的世界中,静态网页模板和静态网页源码模板扮演着至关重要的角色。Web静态网页源码模板是静态网页模板的源代码形式,包含了构建静态网页所需的所有HTML、CSS和JavaScript代码。这些源码模板通常具有高度的可定制性和可扩展性,开发者可以根据自己的需求对模板进行修改和扩展。三、如何选择合适的静态网页模板和源码模板。

weixin_42700926的博客 685

ASP代码分离实例,模板类

ASP使用模板实现了代码分离。 db目录里放的是数据库。 inc目录里放的是连接数据库文件和模板类文件 template目录里放的是静态的模板页面。 index.asp是调用页面。 字段的设置,在模板文件里,如@title@表示这里显示字段title。 AspTemplate.rar

自定义模板列在 PostBack 后消失的问题

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34327223的博客 251

ASP模板引擎类,适用于作cms二次开发,纯原创,无版权问题,免费使用,

好久没写asp程序了,这是我以前写的一个模板引擎,虽然还没有完成,但是我的思想有一定的介签意义,你们可以拿去随便改,如果能完善它的话请联系我,最好能发给我一份,呵呵,好东西当然要大家分享,所以我不要分,希望你们对它重写的的时候能告诉我一下就可以了

用asp做动态网页模板 相当经典

非常好的例子 值得下载。 用asp做动态网页模板 相当经典

Thymeleaf动态页面静态化

Thymeleaf 目标 Thymeleaf的介绍 Thymeleaf的入门 Thymeleaf的语法及标签 搜索页面渲染 商品详情页静态化功能实现 1.Thymeleaf介绍 1动态页面: 通过执行asp、php、jsp和.net等程序生成客户端网页代码的网页。通常可以通过网站后台管理系统对网站的内容进行更新管理。发布新闻,发布公司产品,交流互动,博客,网上调查等,这都是动态网站的一些功能。也是我们常见的。 常见的扩展名有:.asp、php、jsp、cgi和aspx 等。 注意:动态页面的“动态”是网

1663988740 1442

ASP 模板引擎工具类 NVelocityHelper

asp调用NVelocity模板引擎的工具类 NVelocityHelper 操作简单

一招搞定动态文档报告生成,ActiveReport控件超乎想象

点击获取ActiveReports v14.0最新版下载 Word报告是实现信息系统的核心功能点,如果自行开发这类报表模板,不仅需要考虑数据如何准备、报表如何设计,还要自行实现打印和导出等功能,其难度不亚于直接用代码去画报表。 而通过编写代码“画出”的报表,不仅效率不高、后期维护的工作量巨大、不易维护和修改,一旦客户需求有所改变,就需要调整系统源码,给项目交付带来不可预测的风险。 因此,系统中关于Word模板的设计工作需要一款具备强大报表设计能力、无需编码、提供可视化设计器的报表工具来承担。 那么,

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 922

ASP 模板引擎,ASP 模板类 (Taihom.Template.class)

'//ASP 模板引擎 (Taihom.Template.class v2.0) '//Code By Taihom '//Taihom 原创 '//版权说明 '//本类允许转载、复制和修改,但转载、复制和修改的同时请保留原始的出处和作者声明,这也是对作者Taihom劳动成果的一种尊重! '//如果您对本类进行修改,希望您也可以给我发一份您修改过后的类(taihom[@]163.com) 如想获取最新的这个类,可以写邮件给我 本类支持单标签,支持简单的逻辑,支持嵌套模板,支持循环列表,支持循环列表的逻辑,支持自定义标签,支持自定义标签属性和自由获取标签…… 先看看说明!详见 http://www.cnblogs.com/taihom/archive/2009/05/20/1467781.html

最经典的网站模板ASP+access

程序试用后台:http://你的域名/admin/login.asp 后台登陆帐号:admin 密码:admin 说明: 这个是基于asp+access的企业网站源码,数据库已设有有防下载,网站更安全 要修改网站,自定义你自己要的页面,和美化页面都是你自己完成,网站源码程序完整,后台功能强大。网站源码是网络产品,一旦发货,概不退货的。 调试运行环境:要安装IIS服务器(IIS的安装和配置,安装好后,在地址栏输入:http://127.0.0.1 即可访问网站)。

自己翻译的书(关于ASP.NET),希望对大家有帮助 (二)

动态网页介绍我刚才介绍的客户端-服务器端-客户端的处理过程是非常重要的,因为它发生在在每次客户端联系服务器端来获取数据的过程中。这完全不同于你已经熟悉的单机模型或者是客户端-服务器端模型。因为客户端和服务器端不知道对方,所以对于每次交互,你必须发送,初始化或者存储适当的值来维持应用的可持续性。让我们来看一个简单的例子。假设你有一个带有登录表单(Form)的安全站点。在一个标准的程序中,在用户成功登录之后,那就是唯一的你需要做的验证了。事实就是用户成功的登录意味着他已经被授权了使用应用程序的周期。相反的,当你

mashimaro24的专栏 990

Claude Code VSCode集成开发指南:AI编程助手完整配置

Claude Code与Visual Studio Code的深度集成为开发者提供了强大的AI编程支持。本文详细介绍Claude Code VSCode扩展的安装配置、功能特性和实际应用方法。通过完整的配置流程和代码示例,帮助开发者充分利用Claude AI的智能编程能力。文章涵盖从环境搭建到高级功能应用的完整指南,包括代码自动补全、智能重构、实时代码分析等核心功能的使用技巧,以及与现有开发工作流的整合方案。

2501_93058131的博客 5983
上一篇: 人生经验
下一篇: libpoco在mac平台编译详解
morphyyang
博客等级 码龄12年 3粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值