|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧模板|页面利用模板完成ASP代码与页面分别
每一个举行过较年夜型的ASP-Web使用程序计划的开辟职员也许都有以下的履历:ASP代码与页面HTML搅浑难分,营业逻辑与显现体例绞合,使得代码难以了解、难以修正;程序编写必需在美工以后,成为项目瓶颈;整合的程序代码和HTML静态页面时,消费大批的工夫才干失掉幻想的效果,兼作了美工。切实其实,用剧本言语开辟Web使用不简单将数据的处置和数据的显现分隔,但在多人互助的情形下,假如没法将数据和显现分隔,将年夜年夜影响开辟的效力,专业合作的发扬。
别的的剧本言语,如JSP、PHP都有本人的办理计划,ASP的后一代产物ASP.NET也完成了代码与页面,仿佛间接过渡到ASP是不错的选择。可是总有如许或那样的缘故原由让我们不克不及或临时不克不及保持ASP直奔.NET年夜营。从公司角度来看,转换言语是一笔很多的投资,包含雇佣生手.NET程序员、培训原有程序员、开辟工具的转型、开辟作风的转型、界面作风变化、接口作风、软件架构、文档、开辟流程等等;这还意味着原本的代码必需在新言语情况里重写以完成最好的效果和不乱性;同时将间接影响这段工夫内项目标进度,更有大概招致一般程序员出走。由此看来在您决意转换言语之前,在原基本上追求一种办理计划,才是最好的选择。
PHP经由过程模板完成代码与页面,可供选择的有FastTemplate、PHPLIB、Smarty等多种,个中PHPLIB的影响最年夜、利用最多。既然云云,我们间接把它搬到ASP来,关于同时利用PHP和ASP的公司另有很有优点:1、美工处置页面时,不论将要套用PHP仍是ASP,处置体例是一样,不必经由培训;2、程序员编写代码时,两种言语间的思绪靠近或分歧,不异功效在两种言语完成时,只需拷贝过去略作修正便可,包管了事情效力和项目进度。
1、模板类的计划
完成代码封装成为模板类,便是为了与PHPLIB兼容,也使得代码便利办理与扩大。
模板类要完成的方针为:从模板文件中读进显现的HTML代码,将这些显现代码中必要静态数据的中央交换为ASP程序运算所得出的数据,然后依照必定的按次输入。个中,交换的部分能够自在的设定。因而它必需完成以下义务:
・从模板文件中读取显现用的HTML代码。
・将模板文件和实践天生的数据分离,天生输入的了局。
・同意同时处置多个模板。
・同意模板的嵌套。
・同意对模板中的某个独自的部分举行处置。
完成办法:
接纳FSO读取模板文件
接纳正则交换完成模板文件和数据的分离
处置多个模板用数组存储来完成。
模板的嵌套的完成次要的设法是:将模板和输入(任何两头的剖析了局)厚此薄彼,都可拿来做交换,便可完成。
独自部分的处置的经由过程在模板文件中设定标注,然后在正则交换中分离标注来把持,完成部分交换。
2、模板类的完成
给出详细代码之前,先把次要函数列出,用过PHPLIB的伴侣应当对此很熟习了:
1)PublicSubset_root(ByValValue) 设定模板默许目次
2)PublicSubset_file(ByValhandle,ByValfilename) 读取文件
3)PublicSubset_var(ByValName,ByValValue,ByValAppend) 设置映照数据-交换变量
4)PublicSubunset_var(ByValName) 作废数据映照
5)PublicSubset_block(ByValParent,ByValBlockTag,ByValName) 设置数据块
6)PublicSubset_unknowns(ByValunknowns) 设定未指定映照的标志处置体例
7)PublicSubparse(ByValName,ByValBlockTag,ByValAppend) 实行模板文件与数据的分离
8)PublicSubp(ByValName) 输入处置了局
完成代码:
<%
=======================================================================
CLASSNAME:kktTemplateASP页面模板工具
DESIGNBY:彭国辉
DATE:2004-07-05
WEBSITE:http://kacarton.yeah.net/
EMAIL:kacarton@sohu.com
本工具中利用了set_var、set_block等定名办法是为了兼容phplib
=======================================================================
ClasskktTemplate
Privatem_FileName,m_Root,m_Unknowns,m_LastError,m_HaltOnErr
Privatem_ValueList,m_BlockList
Privatem_RegExp
机关函数
PrivateSubClass_Initialize
Setm_ValueList=CreateObject("Scripting.Dictionary")
Setm_BlockList=CreateObject("Scripting.Dictionary")
setm_RegExp=NewRegExp
m_RegExp.IgnoreCase=True
m_RegExp.Global=True
m_FileName=""
m_Root=""
m_Unknowns="remove"
m_LastError=""
m_HaltOnErr=true
EndSub
析构函数
PrivateSubClass_Terminate
Setm_RegExp=Nothing
Setm_BlockMatches=Nothing
Setm_ValueMatches=nothing
EndSub
PublicPropertyGetClassName()
ClassName="kktTemplate"
EndProperty
PublicPropertyGetVersion()
Version="1.0"
EndProperty
PublicSubAbout()
Response.Write("kktTemplateASP页面模板类<br>"&vbCrLf&_
"程序计划:彭国辉2004-07-05<br>"&vbCrLf&_
"团体网站:<ahref=http://kacarton.yeah.net>http://kacarton.yeah.net</a><br>"&vbCrLf&_
"电子邮件:<ahref=mailto:kacarton@sohu.com>kacarton@sohu.com</a><br>")
EndSub
反省目次是不是存在
PublicFunctionFolderExist(ByValpath)
Dimfso
Setfso=CreateObject("Scripting.FileSystemObject")
FolderExist=fso.FolderExists(Server.MapPath(path))
Setfso=Nothing
EndFunction
读取文件内容
PrivateFunctionLoadFile()
DimFilename,fso,hndFile
Filename=m_Root
IfRight(Filename,1)"/"AndRight(Filename,1)""ThenFilename=Filename&"/"
Filename=Server.MapPath(Filename&m_FileName)
Setfso=CreateObject("Scripting.FileSystemObject")
IfNotfso.FileExists(Filename)ThenShow</p>想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的 |
|