我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 网络编程 > ASP专区 > Asp基础/应用 > 一个asp模板类
热门文章排行
热门文章排行 手推车”功能的实现(10-07)
八大法则防范ASP网站漏洞(10-23)
在JSP中访问数据库大全(10-23)
ASP教程十一、调试ASP脚本(10-23)
虚机服务中常见Asp.Net低级错误一览(03-21)
精采文章排行
精采文章排行 ASP.NET实现抓取网页中的链接(11-15)
ASP连接数据库的11种方法(11-10)
如何动态创建网页的RSS内容摘要(11-10)
ASP网站漏洞及入侵防范方法(11-10)
ASP自定义函数:对字符串正则替换(11-10)
技术专题推荐
网管论坛交流
 

一个asp模板类 

作者:佚名   来源:本站教程   点击:   日期:2007-03-22

一个从类到实例都有的模板的例子
这个类还有很多不完善(比如效率),希望大家共同探讨,高手多多指正。
-----------------------------------------------------------------------
首先介绍asp中的类:
Class对象,要求版本 5。
像一些面向对象的语言一样,asp中也提供类的支持,不过功能上不完善。
对于本类中使用的加以说明:
Initialize 事件:在创建类的实例时发生此事件。

Private Sub Class_Initialize()
语句
End Sub


此事件类似于c++中的构造函数,用来构造一个对象,本类中初始化了一些类的属性。
如何创建一个实例呢?

Dim X
Set X = New classname


此时X已经是经过Class_Initialize过程的一个对象了。
在类中定义的函数(过程),就叫做类的方法。
具体细节可参考:
mytju.com/classFiles/TJU001/vbs5.5.chm
-----------------------------------------------------------------------
介绍模板技术:

大家写程序的时候(比如留言板),是不是都经历过循环+表格的方式呢?
这样写出的程序,既可读性差,又难于维护代码。
比如,以后要更改表格的颜色,或者改变页面布局(比如改变留言显示位置),
可能所有的代码都要重写(留言板当然不会,大的新闻系统就麻烦了)。
而模板技术的目的就是把:
表现层(页面)与逻辑层(代码)分开。
这是一个页面文件(就是模板):

下面是经过代码文件解析过的效果:

也许你会问,这又怎样呢?不是更麻烦了么?
也许在初期编写,会增加周期,可是,后期只要你把模板文件更换一下,就是一个
全新的结果了!而这个过程,asp的vbs脚本文件是完全不需修改的。
更进一步:上面的解析过程,是通过你编写的vbs来控制的,这样(理论上)就可以解析成
任何类型的文件,只要有模板!
这样你想到什么呢?对,新浪你也能作了!(夸张修辞)以前做新闻系统时,
news.asp?id=xxx(通过新闻ID读取新闻)的时代就可以结束了,你可以生成静态页面:
2004090618.htm。
言归正传,说模板技术:
模板技术简单说就是把[模板文件]里面的待替换的变量(此处是用{}包含的内容),
替换成你所需要显示的内容。
普通的变量替换很容易:你只要了解FSO的操作(广告秀:cnbruce有个asp教程,有详细讲解)
就不难,把模板文件的内容全部读取,然后对其中要替换的‘标记’进行替换(replace())就可以
实现效果。
而模板技术核心的东西应该是对于循环的处理:
以前看到的一些技术,是采用自定义一个标签,然后在标签中加入决定循环的
一些变量,比如名称、次数。
个人觉得这样可能违背了模板的初衷--表现层与逻辑层分离
而且正则的效率也不敢恭维。
对于循环的次数,应该完全由代码来控制,而不是要制作页面人员(美工)来添加。
所以我采用设置区块的思想:(借鉴自php)
把欲循环的页面代码,作为一个Block,整个block再作为页面的一个变量来处理。

见下图:

需要做的就是加入一个html的注释(类似于上面说得标签)
而在代码部分:(tp为类的一个对象,set_block,set_bvar是类的一个方法)

'对于循环的处理方式

tp.set_block "b" '设置区块,对应图中的 block b
for tmpc=1 to 10 '设置循环次数,可以根据程序而定
tp.set_bvar "t1","alax"&tmpc '解析区块中的变量
tp.set_bvar "t2","proa"&tmpc
tp.set_bvar "t3","hotsjf"&tmpc
tp.prase_block(10-tmpc) '把区块作为变量来看,解析整个区块
next



需要实例的可以下载这个。
www.7csky.com/user/hotsjf/hottemplate.rar
运行test.asp即可看到采用 t.htm 为模板的效果。
效果演示点这:
代码文件:
202.4.136.222:802/test.asp
模板文件:
202.4.136.222:802/t.htm


之后的事情,就是对已经替换了全部标记的模板内容显示了。
显示可以直接将内容 response.write
也可以同FSO,将内容写成文件,这时就可以生成其他类型的文件(例如.htm)。


谢谢大家多多提意见。

简单总结模板的特点:
表现层与逻辑层分开,页面人员不需考虑逻辑部分。
区块(block)的思想,解决asp中容易造成页面与代码交叉的部分。
带有缓存功能,加快文件生成速度。
==



模板代码:引用请保留信息,谢谢。
类:hotTemplat.asp

<%
'======================================'
' hotTemplate
' by hotsjf
' 2004.7.28
' sjf008@tom.com
' some rights reserved
'======================================'

On Error Resume Next

Class hotTemplate
'class member

dim file

dim var_key(50)
dim var_val(50)
dim var_num

dim bvar_key(50)
dim bvar_val(50)
dim bvar_num

dim block_name
dim block_content
dim new_block

dim debug
dim clear_unknown_tag

dim beginBlockStart

dim beginBlockEnd

dim endblockStart

dim endBlockEnd

dim varBegin
dim varEnd


'-------------------------------------------------------------------'
'初始化
Private Sub Class_Initialize
var_num=0
bvar_num=0
debug=false
beginBlockStart="<!-- begin block "
beginBlockEnd=" -->"
endblockStart="<!-- end block "
endBlockEnd=" -->"
varBegin="{"
varEnd="}"
file=""
clear_unknown_tag=true
if debug then
response.write ("in Class_Initialize() <br>")
end if

End Sub
'-------------------------------------------------------------------'
'加载模板文件
Public function loadfile(filename)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile( server.mappath(filename),1)
if err.number>0 then
exp_msg("no file matched!")
end if
file = f.ReadAll
'write into cache
Application.Lock
Application("hot_tp"&filename)=file
Application.Unlock
if debug then
response.write ("in loadfile() ,filename:"&file&"<br>")
response.write ("in loadfile() ,cache:"&Application("hot_tp"&filename)&"<br>")
end if
f.close
set fso=nothing
End function
'-------------------------------------------------------------------'
'从缓存加载模板文件
public function loadfile_fromcache(filename)
if Application("hot_tp"&filename)="" then
loadfile(filename)
else
file = Application("hot_tp"&filename)
end if
end function
'-------------------------------------------------------------------'
'更新缓存
public function update_cache(filename)
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile( server.mappath(filename),1)
if err.number>0 then
exp_msg("no file matched!")
end if
file = f.ReadAll
'write into cache
Application.Lock
Application("hot_tp"&filename)=file
Application.Unlock
end function


'-------------------------------------------------------------------'
'设置全局模板变量
Public function set_var(name,val)

if isarray(name) and isarray(val) then
tmp=0
for each key in name
if key="" then exit for
var_key(var_num)=key
var_val(var_num)=val(tmp)
tmp=tmp+1
if debug then
response.write ("in set_var() ,varname=>"&var_key(var_num)&"||val=>"&var_val

(var_num)&"||<br>")
end if
var_num=var_num+1
next
else
var_key(var_num)=name
var_val(var_num)=val
if debug then
response.write ("in set_var() ,varname=>"&var_key(var_num)&"||val=>"&var_val

(var_num)&"||<br>")
end if
var_num=var_num+1
end if
if err.number>0 then
exp_msg("set var error")
end if
End function
'-------------------------------------------------------------------'
'设置块中模板变量
Public fun

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·ASP中巧用Response属性 ·第六课:ASP脚本循环语句
·在 Web 页上使用条件数值格式 ·连接数据库查询手册(不仅仅适用于asp)
·警惕"给你的FileSystemObject对象加把锁" ·用ASP做全文检索

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。