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

ASP 模板引擎

如想获取最新的这个类,可以写邮件给我

'//ASP 模板引擎 (Taihom.Template.class v2.0)

'//Code By Taihom
'//Taihom 原创
'//版权说明
'//本类允许转载、复制和修改,但转载、复制和修改的同时请保留原始的出处和作者声明,这也是对作者Taihom劳动成果的一种尊重!
'//如果您对本类进行修改,希望您也可以给我发一份您修改过后的类(taihom[@]163.com) 如想获取最新的这个类,可以写邮件给我

本类支持单标签,支持简单的逻辑,支持嵌套模板,支持循环列表,支持循环列表的逻辑,支持自定义标签,支持自定义标签属性和自由获取标签……

先看看说明!

 

 模板类的标签规则说明
标签边界:{}、(){@}是单标签
{}是类标签,主要是应用在{include("...")}和{if ...}...{else}...{/if}
<loop ...><.../loop>循环标签
包含文件:{include("文件路径")}该模板类支持包含同模板目录下的文件,例如 {include("head.html")}
单标签:{@标签名}
{@标签名 属性="值"}
(@字段名)、(@字段下标)
(@...)单标签只能应用在loop块
逻辑标签:{if @标签变量=="值"} 代码块 {else} 代码块 {/if}
{if @标签变量=="值"}
代码块 {/if}

可以处理一些简单的逻辑关系 ,
目前支持的运算符有==<=>=><!=<>
例如:{if @islogin=="1"} 您已经登录 {else} 您没有登录! {/if}
逻辑标签可以应用到循环块中,但是逻辑标签不能跟自己嵌套

v2.0开始支持逻辑标签的条件支持,运算符号前后均可支持标签和带属性的标签,
这样使得{if @var1==@var2} 或者 {if @var xx='??' == @var1 yy='??'}
得到了充分的支持

循环标签:<loop 属性1="值1" 属性2="值2" ... >
代码块 (@数字)
(@字段名 属性="")
</loop>

这里要注意的是 <loop> 标签部分一定要换行之后再写代码块,
这里主要设置一个断点,以便模板可以解析到<loop>的参数。
被循环块包含着的,我称之为循环体,也就是需要循环输出的部分,
一般来说,循环体是用来显示数据用的,这些数据往往都是从数据库直接筛选的结果。
所以,循环体也支持单标签,只不过循环体的单标签部分的边界符号是()
单标签的输出方式有两种,一种是"@字段下标,一种是"@字段名",具体怎么样用,等下例子中会有说明
循环部分也支持逻辑:用法跟上面的逻辑支持也是一样的。循环部分的逻辑支持获取外部单标签的方法是 @变量 不用()边界符号 例如{if (@fieldname)>@var1}

循环块有一个保留属性 name="块名字" 除了这个,想定义什么自定义属性都可以
这个值缺省也是可以的,模板类会自动分配一个name给到<loop>
主要是给<loop>一个唯一的命名,在程序中就可以传递数据给这个<loop>

如果输出的结果为空,那么如何自定义自己的输出结果呢?很简单,只要在loop标签里面加一个empty标签:例如:

<loop name="loop3" sql="select * from [table] where 1=2">
<empty>
<li>很抱歉,没有您要查找的数据!</li>
</empty>
<li>显示你的数据 (@1) (@2) (@3)</li>
</loop>


模板引擎的默认属性支持,你也可以修改程序加上自己定义的属性
这些属性可以应用在单标签上
截取字符len="数字"例如:{@title len="5"} 这样将会截取@title前面5个字符作为输出
返回字符串长度return="len"例如:{@content return="len"} 将返回这个变量的字符串长度
清除HTML格式return="clearhtml"例如:{@content return="clearhtml"} 这样将会清除@content输出的HTML格式
清除所有空格换行return="clearspace"

例如:{@content return="clearspace"} 这样将会清除@content输出的所有的空格和换行

多个return的时候可以用逗号分隔

例如:return="clearhtml,clearspace"

清除所有的格式return="clearformat"这样只会保留文字,连HTML格式,换行什么都没有了
返回字符串的server.urlencodereturn="urlencode"{@content return="urlencode"} 将返回与ASP中server.urlencode("字符串")一致的结果
日期显示方式转换dateformat="日期显示方式"

年(yyyy|yy)月(mm|m)日(dd|d) 时(HH|H)分(MM|M)秒(SS|S)星期(w|W)

默认支持的方式有
dateformat="0" 显示日期和/或时间。如果有日期部分,则将该部分显示为短日期格式。如果有时间部分,则将该部分显示为长时间格式。如果都存在,则显示所有部分
dateformat="1" 使用计算机区域设置中指定的长日期格式显示日期
dateformat="2" 使用计算机区域设置中指定的短日期格式显示日期
dateformat="3" 使用计算机区域设置中指定的时间格式显示时间
dateformat="4" 使用 24 小时格式 (hh:mm) 显示时间

其他的日期格式化方式,可以参照下面的例子:
例如:{@datetime dateformat="yyyy-mm-dd"} 将会输出类似 2009-03-01这样的时间格式
例如:{@datetime dateformat="yy年mm月dd日- 星期w"} 将会输出类似 09年03月01日 - 星期? 这样的时间格式

模板类的使用例子,假设已经实例化到tpl
类的功能方法说明
设置 '配置信息
'tpl.setCharset = "utf-8" '可选设置,默认是utf-8
'tpl.setCache = 1 '可选设置,缓存开关,默认是关的
tpl.SITE_ROOT = cStr(Server.MapPath("./"))'必选设置,后面不带斜杠
'tpl.setTemplatedir = "/templates/"'可选设置,设置模板目录
'tpl.setCachedir = "/cache/templates/"'可选设置,设置缓存目录
'tpl.setAbsPath = 1 '可选设置,模板绝对路径,默认是开的,作用是输出的时候将模板相对路径替换成绝对路径,已经是绝对路径或者描点等不受影响,此开关只是转换那些不是绝对路径的
'tpl.CachePageTimeout=0'(v2.0新特性)可选设置,0=不生产前台页面缓存,>0表示缓存的时间,单位是分钟 ,这个设置需要在页面开头,也就是在赋值之前设置,如果不设置,默认不缓存,建议数据有实时更新的不进行设置
tpl.path = "index.html"'必选,模板文件路径相对于模板目录
加载并解析模板tpl.load() '加载模板,这个方法负责读取并且解析模板,
当然,如果你不需要提取模板的参数,你可以放到.display()之前
例如:
tpl.load()
tpl.display()
提取所有块标签Set getblock = tpl.getblock

'获得块列表,返回dic对象,key = 循环块名称,items = 块的属性(数组,0=属性名称,1=值)

例子:
Dim blockname,block
Set block = tpl.getblock
For blockname in block
Response.Write(blockname)'//这样 就可以输出所有块的名称了
Next

指定块标签的属性Set getattr = tpl.getattr

如果你想提取块名字是loop1的sql的内容 那么只要 getattr("loop1.sql")
如果没有,将返回empty值,也就是空值

标签赋值tpl.add("@标签")="值"设置标签的值,也就是用这个值来替换掉{@标签}
块标签赋值tpl.add("块标签")=记录集设置循环块的值,这里我们只要给一个记录集,其他的输出,由模板去执行,也不用判断记录集是否为空。
显示输出tpl.display()'显示模板,将结果输出
清除缓存tpl.ClearCache如果设置了模板缓存,用这个将可以清除所有的模板缓存,对于不常修改的模板,我建议开启缓存。当然如果模板有改动,必须要清空了缓存,缓存才会重建
程序中获取输出结果html = tpl.gethtml将输出的结果赋值给html变量,这里的结果是已经是最后的输出结果
生成静态页面tpl.OutPutPage(cStr(Server.MapPath("./"))) = "asdf.html"如果需要生成静态页面,使用 .OutPutPage("路径")=文件名
完整的类使用方法(来自demo.asp)

<script language="vbscript" runat="server">
Response.Buffer = true
Response.Expires = 0
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "No-Cache"
Response.CodePage="65001"
Response.Charset="utf-8"
</script>
<!--#include file="class/Template.class.vbs.asp" -->
<!--#include file="class/DBOperate.class.vbs.asp" -->
<%
'****************ACCESS数据库******************

Dim dbo
Set dbo = New DBOperateClass
dbo.setConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mapPath("./test.mdb")

'//-------这里是使用该类的例子
Dim tpl
Set tpl = New TemplateManageClass
'配置信息
'tpl.setCharset = "utf-8" '可选设置,默认是utf-8
'tpl.setCache = 1 '可选设置,缓存开关,默认是关的
tpl.SITE_ROOT = cStr(Server.MapPath("./"))'必选设置,后面不带斜杠
'tpl.setTemplatedir = "/templates/"'可选设置,设置模板目录
'tpl.setCachedir = "/cache/templates/"'可选设置,设置缓存目录

tpl.path = "index.html"'必选,模板文件路径相对于模板目录
tpl.load() '加载模板


'输出的数据变量
tpl.add("@title")="标题在这里"
tpl.add("@username")="taihom"
tpl.add("@name")="梅川内酷"
tpl.add("@password")="密码"
tpl.add("@runtime")=tpl.RunTimer
tpl.add("@author")=tpl.Author

'获得循环块的参数
Dim block,getattr
Set block = tpl.getblock'获得块列表,返回dic对象,key = 循环块,items = 块的属性(数组,0=属性名称,1=值)
Set getattr = tpl.getattr'获得属性列表,返回dic对象

Dim sql1 : sql1 = getattr("loop1.sql")'获取loop1块的sql属性
Dim sql2 : sql2 = getattr("loop2.sql")'获取loop2块的sql属性
Dim sql3 : sql3 = getattr("loop3.sql")'获取loop3块的sql属性

'循环块内容输出
tpl.add("loop1") = dbo.execute(sql1)'直接给loop1块数据
tpl.add("loop2") = dbo.execute(sql2)'直接给loop2块数据
tpl.add("loop3") = dbo.execute(sql3)'直接给loop3块数据

tpl.display()'显示模板

'--------------清楚所有模板缓存
'tpl.ClearCache

'--------------获取输出的代码
'html = tpl.gethtml

'--------------将结果生成静态页面
'如果需要生成静态页面,使用 .OutPutPage("路径")=文件名
'tpl.OutPutPage(cStr(Server.MapPath("./"))) = "asdf.html"

dbo.close
Set tpl = Nothing
Set dbo = Nothing
%>

 

代码在这里下载:如想获取最新的这个类,可以写邮件给我
演示地址:http://www.taihom.com/templateclass/demo.asp
模板地址:http://www.taihom.com/templateclass/templates
代码下载:http://www.taihom.com/templateclass/taihom.template.class.rar
最新的下载: http://download.csdn.net/source/1330402

转载于:https://www.cnblogs.com/taihom/archive/2009/05/20/1467781.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值