ASP模板类[实现一维循环和二维循环,可以从文件、数据库、变量取摸板]
‘’=========================================================
‘’ File: class_template.asp
‘’ Version:1.0
‘’ Date: 2004-5-7
‘’ Script Written by R.H
‘’ Description: ASP Template Class
‘’=========================================================
‘’ Copyright (C) 2004 Interflower Studios. All rights reserved.
‘’ Web: http://www.interflower.cn
‘’ Need help? Contact: ranhuan@msn.com
‘’=========================================================
‘’=========================================================
‘’模板中替换的部分用{{%}}表示
‘’模板中的循环用<!-- BEGIN % -->开始 <!-- END % -->结束 支持一次嵌套
Class Template
Private tmp
Private tpl_dir, tpl, tpl_blk
Private var_list, blk_list, blk_var_list
Private re, match, matchs
Private Sub class_Initialize
sql = ""
tpl_dir = "templates/"
tpl = ""
blk=""
Set var_list = Server.CreateObject("Scripting.Dictionary")
Set blk_list = Server.CreateObject("Scripting.Dictionary")
Set blk_var_list = Server.CreateObject("Scripting.Dictionary")
Set re = New RegExp
End Sub
‘’取得主体模板
‘’========================
‘’从变量取出
Public Sub SetTpl(tplvar)
tpl = tplvar
End Sub
‘’ 从DB中取出,自己修改sql语句
Public Sub SetTplDb(tplname)
Dim sql, rs
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT content FROM templates WHERE name = ‘’"&tplname&"‘’"
rs.Open sql,conn,1,1
If rs.RecordCount <> 1 Then
Response.Write("数据库错误!<br>")
Response.End()
End If
tpl = rs("content")
rs.Close
Set rs = Nothing
End Sub
‘’从文件取出
Public Sub SetTplFile(tplfile)
Dim FSO, oFile
Set FSO = Server.Createobject("Scripting.FileSystemObject")
If FSO.FileExists(Server.Mappath(tpl_dir & tplfile)) then
Set oFile = FSO.OpenTextFile(Server.Mappath(tpl_dir & tplfile))
tpl = oFile.ReadAll
oFile.Close
Set oFile = Nothing
Else
Response.Write "模板文件不存在!<br>"
End if
Set FSO = nothing
End Sub
‘’取得区块模板
‘’========================
‘’从变量取出
Public sub SetBlk(blkname, tplvar)
re.IgnoreCase = True
re.Global = True
re.Pattern = {{ & blkname & }}
tpl = re.Replace(tpl, tplvar)
rs.Close
End Sub
‘’从数据库取出
Public sub SetBlkDb(blkname, tplname)
Dim sql, rs
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM templates WHERE name = ‘’"&tplname&"‘’"
rs.Open sql,conn,1,1
tmp = rs("content")
rs.Close
SetBlk blkname, tmp
set rs = Nothing
End Sub
‘’从文件取出
Public sub SetBlkFile(blkname, tplfile)
Dim FSO, oFile
Set FSO = createobject("Scripting.FileSystemObject")
If FSO.FileExists(server.mappath(tpl_dir &tplfile)) Then
Set oFile = FSO.OpenTextFile(Server.MapPath(tpl_dir &tplfile))
tmp = oFile.ReadAl
SetBlock blkname, tmp
oFile.Close
set oFile = Nothing
Else
Response.Write "区块模板文件不存在!<br>"
End If
Set FSO = Nothing
End Sub
‘’设置变量替换值
‘’========================
‘’简单替换
Public Sub SetVar(sName, sValue)
If var_list.Exists(sName) then
var_list.Remove sName
var_list.Add sName, sValue
Else
var_list.Add sName, sValue
End if
End Sub
‘’简单替换 追加数据
Public Sub AppendVar(sName, sValue)
If var_list.Exists(sName) then
tmp = var_list.Item(sName) & sValue
var_list.Remove sName
var_list.Add sName, tmp
Else
var_list.Add sName, sValue
End If
End Sub
‘’循环替换
‘’========================
‘’一维循环开始
Public Sub UdBlk(BlkName)
tpl_blk = BlkName
re.IgnoreCase = True
re.Global = True
re.Pattern = "<!--\s+BEGIN\s+(" & BlkName & ")\s+-->([\s\S.]*)<!--\s+END\s+\1\s+-->"
Set Matches = re.Execute(tpl)
If Matches.Count > 0 Then
Set match = Matches
For Each match In Matches
blk_list.Add BlkName, match.SubMatches(1)
var_list.Add BlkName, ""
tpl = re.Replace(tpl, "{{"&BlkName&"}}")
next
Else
Response.Write "Block " & BlkName & " does not exists!"
End If
end sub
‘’一维循环结束
Public Sub PsBlk(BlkName)
tmp = blk_list.Item(BlkName)
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & p_var_tag_o & ")([^}]+)" & p_var_tag_c
Set Matches = re.Execute(tmp)
for each match in Matches
if blk_var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.value
tmp = re.Replace(tmp, blk_var_list.Item(match.SubMatches(1)))
end if
next
tmp = var_list.Item(BlkName) & tmp
var_list.Remove BlkName
var_list.Add BlkName, tmp
blk_var_list.RemoveAll
End Sub
‘’二维循环开始
Public Sub UdBlk2(BlkName)
tmp = blk_list.Item(tpl_blk)
re.IgnoreCase = True
re.Global = True
re.Pattern = "<!--\s+BEGIN\s+(" & BlkName & ")\s+-->([\s\S.]*)<!--\s+END\s+\1\s+-->"
Set Matches = re.Execute(tmp)
If Matches.Count > 0 Then
Set match = Matches
For Each match In Matches
blk_list.Add BlkName, match.SubMatches(1)
‘’response.Write match.SubMatches(1)
blk_var_list.Add BlkName, ""
tmp = re.Replace(tmp, "{{"&BlkName&"}}")
blk_list.ReMove tpl_blk
blk_list.Add tpl_blk, tmp
next
Else
Response.Write "Block " & BlkName & " does not exists!"
End If
end sub
‘’二维循环结束
Public Sub PsBlk2(BlkName)
tmp = blk_list.Item(BlkName)
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & p_var_tag_o & ")([^}]+)" & p_var_tag_c
Set Matches = re.Execute(tmp)
for each match in Matches
if blk_var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.value
tmp = re.Replace(tmp, blk_var_list.Item(match.SubMatches(1)))
end if
next
tmp = blk_var_list.Item(BlkName) & tmp
blk_var_list.RemoveAll
blk_var_list.Add BlkName, tmp
End Sub
‘’循环中的替换
Public Sub SetBlkVar(s, v)
If blk_var_list.Exists(s) then
blk_var_list.Remove s
blk_var_list.Add s, v
Else
blk_var_list.Add s, v
End if
End Sub
‘’解析模板和输出内容
‘’========================
‘’执行解析
‘’可以通过下面的过程取得网页内容,结合fso可以生成静态页面
Public Property GetTpl
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & {{ & ")([^}]+)" & }}
Set Matches = re.Execute(tpl)
for each match in Matches
if var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.Value
tpl = re.Replace(tpl, var_list.Item(match.SubMatches(1)))
end if
next
GetTpl = tpl
End Property
‘’输出内容
Public Sub Parse
Response.Write tpl
End Sub
End Class
%><%
‘’=========================================================
‘’ File: class_template.asp
‘’ Version:1.0
‘’ Date: 2004-5-7
‘’ Script Written by R.H
‘’ Description: ASP Template Class
‘’=========================================================
‘’ Copyright (C) 2004 Interflower Studios. All rights reserved.
‘’ Web: http://www.interflower.cn
‘’ Need help? Contact: ranhuan@msn.com
‘’=========================================================
‘’=========================================================
‘’模板中替换的部分用{{%}}表示
‘’模板中的循环用<!-- BEGIN % -->开始 <!-- END % -->结束 支持一次嵌套
Class Template
Private tmp
Private tpl_dir, tpl, tpl_blk
Private var_list, blk_list, blk_var_list
Private re, match, matchs
Private Sub class_Initialize
sql = ""
tpl_dir = "templates/"
tpl = ""
blk=""
Set var_list = Server.CreateObject("Scripting.Dictionary")
Set blk_list = Server.CreateObject("Scripting.Dictionary")
Set blk_var_list = Server.CreateObject("Scripting.Dictionary")
Set re = New RegExp
End Sub
‘’取得主体模板
‘’========================
‘’从变量取出
Public Sub SetTpl(tplvar)
tpl = tplvar
End Sub
‘’ 从DB中取出,自己修改sql语句
Public Sub SetTplDb(tplname)
Dim sql, rs
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT content FROM templates WHERE name = ‘’"&tplname&"‘’"
rs.Open sql,conn,1,1
If rs.RecordCount <> 1 Then
Response.Write("数据库错误!<br>")
Response.End()
End If
tpl = rs("content")
rs.Close
Set rs = Nothing
End Sub
‘’从文件取出
Public Sub SetTplFile(tplfile)
Dim FSO, oFile
Set FSO = Server.Createobject("Scripting.FileSystemObject")
If FSO.FileExists(Server.Mappath(tpl_dir & tplfile)) then
Set oFile = FSO.OpenTextFile(Server.Mappath(tpl_dir & tplfile))
tpl = oFile.ReadAll
oFile.Close
Set oFile = Nothing
Else
Response.Write "模板文件不存在!<br>"
End if
Set FSO = nothing
End Sub
‘’取得区块模板
‘’========================
‘’从变量取出
Public sub SetBlk(blkname, tplvar)
re.IgnoreCase = True
re.Global = True
re.Pattern = {{ & blkname & }}
tpl = re.Replace(tpl, tplvar)
rs.Close
End Sub
‘’从数据库取出
Public sub SetBlkDb(blkname, tplname)
Dim sql, rs
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM templates WHERE name = ‘’"&tplname&"‘’"
rs.Open sql,conn,1,1
tmp = rs("content")
rs.Close
SetBlk blkname, tmp
set rs = Nothing
End Sub
‘’从文件取出
Public sub SetBlkFile(blkname, tplfile)
Dim FSO, oFile
Set FSO = createobject("Scripting.FileSystemObject")
If FSO.FileExists(server.mappath(tpl_dir &tplfile)) Then
Set oFile = FSO.OpenTextFile(Server.MapPath(tpl_dir &tplfile))
tmp = oFile.ReadAl
SetBlock blkname, tmp
oFile.Close
set oFile = Nothing
Else
Response.Write "区块模板文件不存在!<br>"
End If
Set FSO = Nothing
End Sub
‘’设置变量替换值
‘’========================
‘’简单替换
Public Sub SetVar(sName, sValue)
If var_list.Exists(sName) then
var_list.Remove sName
var_list.Add sName, sValue
Else
var_list.Add sName, sValue
End if
End Sub
‘’简单替换 追加数据
Public Sub AppendVar(sName, sValue)
If var_list.Exists(sName) then
tmp = var_list.Item(sName) & sValue
var_list.Remove sName
var_list.Add sName, tmp
Else
var_list.Add sName, sValue
End If
End Sub
‘’循环替换
‘’========================
‘’一维循环开始
Public Sub UdBlk(BlkName)
tpl_blk = BlkName
re.IgnoreCase = True
re.Global = True
re.Pattern = "<!--\s+BEGIN\s+(" & BlkName & ")\s+-->([\s\S.]*)<!--\s+END\s+\1\s+-->"
Set Matches = re.Execute(tpl)
If Matches.Count > 0 Then
Set match = Matches
For Each match In Matches
blk_list.Add BlkName, match.SubMatches(1)
var_list.Add BlkName, ""
tpl = re.Replace(tpl, "{{"&BlkName&"}}")
next
Else
Response.Write "Block " & BlkName & " does not exists!"
End If
end sub
‘’一维循环结束
Public Sub PsBlk(BlkName)
tmp = blk_list.Item(BlkName)
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & p_var_tag_o & ")([^}]+)" & p_var_tag_c
Set Matches = re.Execute(tmp)
for each match in Matches
if blk_var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.value
tmp = re.Replace(tmp, blk_var_list.Item(match.SubMatches(1)))
end if
next
tmp = var_list.Item(BlkName) & tmp
var_list.Remove BlkName
var_list.Add BlkName, tmp
blk_var_list.RemoveAll
End Sub
‘’二维循环开始
Public Sub UdBlk2(BlkName)
tmp = blk_list.Item(tpl_blk)
re.IgnoreCase = True
re.Global = True
re.Pattern = "<!--\s+BEGIN\s+(" & BlkName & ")\s+-->([\s\S.]*)<!--\s+END\s+\1\s+-->"
Set Matches = re.Execute(tmp)
If Matches.Count > 0 Then
Set match = Matches
For Each match In Matches
blk_list.Add BlkName, match.SubMatches(1)
‘’response.Write match.SubMatches(1)
blk_var_list.Add BlkName, ""
tmp = re.Replace(tmp, "{{"&BlkName&"}}")
blk_list.ReMove tpl_blk
blk_list.Add tpl_blk, tmp
next
Else
Response.Write "Block " & BlkName & " does not exists!"
End If
end sub
‘’二维循环结束
Public Sub PsBlk2(BlkName)
tmp = blk_list.Item(BlkName)
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & p_var_tag_o & ")([^}]+)" & p_var_tag_c
Set Matches = re.Execute(tmp)
for each match in Matches
if blk_var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.value
tmp = re.Replace(tmp, blk_var_list.Item(match.SubMatches(1)))
end if
next
tmp = blk_var_list.Item(BlkName) & tmp
blk_var_list.RemoveAll
blk_var_list.Add BlkName, tmp
End Sub
‘’循环中的替换
Public Sub SetBlkVar(s, v)
If blk_var_list.Exists(s) then
blk_var_list.Remove s
blk_var_list.Add s, v
Else
blk_var_list.Add s, v
End if
End Sub
‘’解析模板和输出内容
‘’========================
‘’执行解析
‘’可以通过下面的过程取得网页内容,结合fso可以生成静态页面
Public Property GetTpl
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & {{ & ")([^}]+)" & }}
Set Matches = re.Execute(tpl)
for each match in Matches
if var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.Value
tpl = re.Replace(tpl, var_list.Item(match.SubMatches(1)))
end if
next
GetTpl = tpl
End Property
‘’输出内容
Public Sub Parse
Response.Write tpl
End Sub
End Class
%><%
‘’=========================================================
‘’ File: class_template.asp
‘’ Version:1.0
‘’ Date: 2004-5-7
‘’ Script Written by R.H
‘’ Description: ASP Template Class
‘’=========================================================
‘’ Copyright (C) 2004 Interflower Studios. All rights reserved.
‘’ Web: http://www.interflower.cn
‘’ Need help? Contact: ranhuan@msn.com
‘’=========================================================
‘’=========================================================
‘’模板中替换的部分用{{%}}表示
‘’模板中的循环用<!-- BEGIN % -->开始 <!-- END % -->结束 支持一次嵌套
Class Template
Private tmp
Private tpl_dir, tpl, tpl_blk
Private var_list, blk_list, blk_var_list
Private re, match, matchs
Private Sub class_Initialize
sql = ""
tpl_dir = "templates/"
tpl = ""
blk=""
Set var_list = Server.CreateObject("Scripting.Dictionary")
Set blk_list = Server.CreateObject("Scripting.Dictionary")
Set blk_var_list = Server.CreateObject("Scripting.Dictionary")
Set re = New RegExp
End Sub
‘’取得主体模板
‘’========================
‘’从变量取出
Public Sub SetTpl(tplvar)
tpl = tplvar
End Sub
‘’ 从DB中取出,自己修改sql语句
Public Sub SetTplDb(tplname)
Dim sql, rs
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT content FROM templates WHERE name = ‘’"&tplname&"‘’"
rs.Open sql,conn,1,1
If rs.RecordCount <> 1 Then
Response.Write("数据库错误!<br>")
Response.End()
End If
tpl = rs("content")
rs.Close
Set rs = Nothing
End Sub
‘’从文件取出
Public Sub SetTplFile(tplfile)
Dim FSO, oFile
Set FSO = Server.Createobject("Scripting.FileSystemObject")
If FSO.FileExists(Server.Mappath(tpl_dir & tplfile)) then
Set oFile = FSO.OpenTextFile(Server.Mappath(tpl_dir & tplfile))
tpl = oFile.ReadAll
oFile.Close
Set oFile = Nothing
Else
Response.Write "模板文件不存在!<br>"
End if
Set FSO = nothing
End Sub
‘’取得区块模板
‘’========================
‘’从变量取出
Public sub SetBlk(blkname, tplvar)
re.IgnoreCase = True
re.Global = True
re.Pattern = {{ & blkname & }}
tpl = re.Replace(tpl, tplvar)
rs.Close
End Sub
‘’从数据库取出
Public sub SetBlkDb(blkname, tplname)
Dim sql, rs
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM templates WHERE name = ‘’"&tplname&"‘’"
rs.Open sql,conn,1,1
tmp = rs("content")
rs.Close
SetBlk blkname, tmp
set rs = Nothing
End Sub
‘’从文件取出
Public sub SetBlkFile(blkname, tplfile)
Dim FSO, oFile
Set FSO = createobject("Scripting.FileSystemObject")
If FSO.FileExists(server.mappath(tpl_dir &tplfile)) Then
Set oFile = FSO.OpenTextFile(Server.MapPath(tpl_dir &tplfile))
tmp = oFile.ReadAl
SetBlock blkname, tmp
oFile.Close
set oFile = Nothing
Else
Response.Write "区块模板文件不存在!<br>"
End If
Set FSO = Nothing
End Sub
‘’设置变量替换值
‘’========================
‘’简单替换
Public Sub SetVar(sName, sValue)
If var_list.Exists(sName) then
var_list.Remove sName
var_list.Add sName, sValue
Else
var_list.Add sName, sValue
End if
End Sub
‘’简单替换 追加数据
Public Sub AppendVar(sName, sValue)
If var_list.Exists(sName) then
tmp = var_list.Item(sName) & sValue
var_list.Remove sName
var_list.Add sName, tmp
Else
var_list.Add sName, sValue
End If
End Sub
‘’循环替换
‘’========================
‘’一维循环开始
Public Sub UdBlk(BlkName)
tpl_blk = BlkName
re.IgnoreCase = True
re.Global = True
re.Pattern = "<!--\s+BEGIN\s+(" & BlkName & ")\s+-->([\s\S.]*)<!--\s+END\s+\1\s+-->"
Set Matches = re.Execute(tpl)
If Matches.Count > 0 Then
Set match = Matches
For Each match In Matches
blk_list.Add BlkName, match.SubMatches(1)
var_list.Add BlkName, ""
tpl = re.Replace(tpl, "{{"&BlkName&"}}")
next
Else
Response.Write "Block " & BlkName & " does not exists!"
End If
end sub
‘’一维循环结束
Public Sub PsBlk(BlkName)
tmp = blk_list.Item(BlkName)
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & p_var_tag_o & ")([^}]+)" & p_var_tag_c
Set Matches = re.Execute(tmp)
for each match in Matches
if blk_var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.value
tmp = re.Replace(tmp, blk_var_list.Item(match.SubMatches(1)))
end if
next
tmp = var_list.Item(BlkName) & tmp
var_list.Remove BlkName
var_list.Add BlkName, tmp
blk_var_list.RemoveAll
End Sub
‘’二维循环开始
Public Sub UdBlk2(BlkName)
tmp = blk_list.Item(tpl_blk)
re.IgnoreCase = True
re.Global = True
re.Pattern = "<!--\s+BEGIN\s+(" & BlkName & ")\s+-->([\s\S.]*)<!--\s+END\s+\1\s+-->"
Set Matches = re.Execute(tmp)
If Matches.Count > 0 Then
Set match = Matches
For Each match In Matches
blk_list.Add BlkName, match.SubMatches(1)
‘’response.Write match.SubMatches(1)
blk_var_list.Add BlkName, ""
tmp = re.Replace(tmp, "{{"&BlkName&"}}")
blk_list.ReMove tpl_blk
blk_list.Add tpl_blk, tmp
next
Else
Response.Write "Block " & BlkName & " does not exists!"
End If
end sub
‘’二维循环结束
Public Sub PsBlk2(BlkName)
tmp = blk_list.Item(BlkName)
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & p_var_tag_o & ")([^}]+)" & p_var_tag_c
Set Matches = re.Execute(tmp)
for each match in Matches
if blk_var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.value
tmp = re.Replace(tmp, blk_var_list.Item(match.SubMatches(1)))
end if
next
tmp = blk_var_list.Item(BlkName) & tmp
blk_var_list.RemoveAll
blk_var_list.Add BlkName, tmp
End Sub
‘’循环中的替换
Public Sub SetBlkVar(s, v)
If blk_var_list.Exists(s) then
blk_var_list.Remove s
blk_var_list.Add s, v
Else
blk_var_list.Add s, v
End if
End Sub
‘’解析模板和输出内容
‘’========================
‘’执行解析
‘’可以通过下面的过程取得网页内容,结合fso可以生成静态页面
Public Property GetTpl
re.IgnoreCase = True
re.Global = True
re.Pattern = "(" & {{ & ")([^}]+)" & }}
Set Matches = re.Execute(tpl)
for each match in Matches
if var_list.Exists(match.SubMatches(1)) then
re.Pattern = match.Value
tpl = re.Replace(tpl, var_list.Item(match.SubMatches(1)))
end if
next
GetTpl = tpl
End Property
‘’输出内容
Public Sub Parse
Response.Write tpl
End Sub
End Class
%>
下一篇:各种存储过程使用指南 >>
相关文章:
- · 统计在线人数、每日访问人数和总人数
- · 如何动态ASP文件
- · 用asp打开光驱!
- · asp分页显示详论
- · 面向对象的ASP技术:思考与实践
- · 如何获得真实的ip
- · 对文件夹操作2
- · 对文件的操作1
- · 全面优化ASP应用程序的性能(转载)
- · 测试访问者电脑的分辨率
- · 让你的ASP运行于非Windows平台
- · 用ASP编程实现快速查找
- · Calculator
- · ASP导出Excel数据的四种方法
- · ASP编程中15个非常有用的例子
- · 改进ASP应用程序中的字符串处理性能
- · 保护你的ASP页面的两种办法
- · ASP如何获取真实IP地址
- · 关于<SELECT>的无限级联(省|市|县|乡|村|...)
- · 一个简单的计数器和流量统计程序
- · 最简洁的多重查询的解决方案
- · 让上传变的简简单单
- · Microsoft Word 对象
- · ASP操作Excel技术总结
- · 图片上传前取得尺寸
- · 用ASP、VB和XML建立互联网应用程序(1)
- · ASP分页显示之乱盖
- · 为你的网页加一个Loading !!!!
- · 关于asp调试出错信息
- · Vbscript类型转换函数
- · ASP自动生成编号的方法
- · JMAIL属性、方法大全
- · ASP中模板思想的应用
- · asp中常用的长度单位
- · 输出EXCEL文件的通用函数,很实用
- · 二级域名原理以及程序,申请即可开通
- · ASP编写完整的一个IP所在地搜索类
- · asp标示及命令集合
