我曾在《用ASP写一个支持自定义模板的数据记录输出函数》中写过一个支持自定义HTML模板显示数据库记录集(Recordset)的方法(函数),现在类推一下,写一个支持自定义HTML模板显示字典对象中的内容的方法(函数)。
这个方法(函数)接受4个参数,分别是:
- 一个字典对象
- 模板标签的头部
- 模板标签的重复项目部分
- 模板标签的底部
它返回用参数指定的头部、重复项目部分与底部拼接好完整HTML代码。
' 获取将字典对象中的内容以指定的模板显示出来的HTML代码
Public Function GetDicListWithTemplate(ByRef oDictionary, ByRef sHeader, ByRef sRepeater, ByRef sFooter)
Dim i, regEx, matches, repeater, j, aKeys, aItems
'On Error Resume Next
GetDicListWithTemplate = ""
GetDicListWithTemplate = GetDicListWithTemplate & sHeader
Set regEx = Server.CreateObject("VBScript.RegExp")
Set matches = Nothing
regEx.Global = True
regEx.IgnoreCase = True
'数据行
If Count > 0 Then
aKeys = oDictionary.Keys
aItems = oDictionary.Items
For i = 1 To Count
repeater = sRepeater
' 先替换掉<#= Keys #>标签
regEx.Pattern = "<#=\s*(Keys)\s*#>"
Set matches = regEx.Execute(sRepeater)
For j = 0 To matches.Count - 1
If matches(j).SubMatches.Count > 0 Then
repeater = Replace(repeater, matches(j), aKeys(i-1))
Else
repeater = Replace(repeater, matches(j), "***")
End If
Next
regEx.Pattern = "<#=\s*(Items)\s*#>"
Set matches = regEx.Execute(sRepeater)
For j = 0 To matches.Count - 1
If matches(j).SubMatches.Count > 0 Then
repeater = Replace(repeater, matches(j), aItems(i-1))
Else
repeater = Replace(repeater, matches(j), "***")
End If
Next
GetDicListWithTemplate = GetDicListWithTemplate & repeater
Next
End If
If Not matches Is Nothing Then
Set matches = Nothing
End If
Set regEx = Nothing
GetDicListWithTemplate = GetDicListWithTemplate & sFooter
On Error Goto 0
End Function
使用示例:
如果我们将访问网站的在线的活跃用户信息保存在了一个字典对象里,用SessionID作为字典对象的键,而用另外的字符串比如用户名作为字典对象的值。那么,我们现在用一个列表将它显示出来,就可以如下这样写:
Dim sHeader, sRepeater, sFooter
sHeader = "<div><table class=""tbLikeGoogle""><thead><tr><th>用户键值</th><th>用户标识</th></tr></thead><tbody>"
sRepeater = "<tr><td><#= Keys #></td><td><#= Items #></td></tr>"
sFooter = "</tbody></table></div>"
Response.Write GetDicListWithTemplate(UserDictionary, sHeader, sRepeater, sFooter)
显示效果如下:
用户键值 | 用户标识 |
---|
38928318 | 2052 |
asdlkfj | askdfjsdafj |
真是太方便啦!