|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
国内有些大的CRM厂商的ASP就写得不错.无论是概念还是它里面用JAVASCRIPT的能力.并不是说现在的程序员用了ASP.NET来写程序就可以说自己高档了页面为了不ASP程序和HTML代码混写形成保护坚苦的情形,本文先容了一种办法,使用模板来分别程序和页面,使程序计划加倍轻松。
在利用ASP制造一个站点的时分,经常会呈现一个ASP文件中,程序代码和HTML代码夹杂的情形。如许子做有很多弱点:
1.且不说编程时就要对页面结构举行计划和编排,形成代码凌乱难明,不标准;
2.当必要改动页面表面时,你不但要改动HTML部分,也必要改动ASP代码,不容易保护。
那末,要怎样才干制止这些贫苦呢?
谜底就是利用模板文件,将ASP代码和HTML页面分隔,统统成绩就都办理了。利用模板有以下优点:
1.在很短的工夫内能够交换全部站点的表面;
2.使程序员能够笼统编程,而不必打仗HTML代码;
3.能够反复使用之前的模板。
利用过PHP的程序就会晓得,PHP有个模板程序(FastTemplate),如今的成绩是怎样在ASP中完成相似的功效。
Microsoft的ASP带有两种剧本:VBScript和JScript。它们都带有一个正则表达式工具(RegExp),使用字符串工具和RegExp工具,就能够轻松的完成模板功效。沐枫以此编写了一个Template.JScript.INC文件,此文件的内容附在文章前面。有才能的读者能够依据本人的必要举行改善。
上面先容一下利用办法。因为此文件是利用JScript编写的(固然要转成VBScript也很简单),因而,缺省剧本言语要设为JScript,即ASP程序第一行应为:%@Language=JScript%,然后再包括模板程叙文件:!#includefile=Template.JScript.INC。
先先容一下Template类的利用:
1.创建Template工具:Template(Path)
参数:Path(字符串范例)HTML模板文件的寄存路径。
利用new操纵符创建Template工具。
例子:
vartpl=newTemplate(c: emplate);
在程序中能够用tpl.TplPath来获得模板路径,也能够经由过程tpl.TplPath来改动模板路径。
如:
tpl.TplPath=d: emplate;
2.装载模板文件:Template.Load(Name,File)
参数:Name(字符串范例)是一个模板变量名。
File(字符串范例)模板文件名。此文件寄存在HTML模板路径下。
读取文件File到模板变量Name中。
例子:
tpl.Load(Main,TEST.HTM);
此时,模板变量Main就包括了文件TEST.HTM的内容。
你能够用tpl.Main来会见模板变量Main。
例子:
%=tpl.Main%
将显现方才读出去的TEST.HTM文件内容。
3.模板分拆:Template.Split(Name)
参数:Name(字符串范例)是一个模板变量名。
将Name中的子模板分化。
例子:
先假定上例中的TEST.HTM内容为:
-
这是主模板。接上去是:!#TPLDEFSUBSUB子模板,另有
!#TPLDEFTHIRDTHIRD模板。!#TPLENDTHIRD
!#TPLENDSUB
-
那末:
tpl.Split(Main);
实行今后,就会天生新的模板变量SUB,和THIRD,它们的内容就是!#TPLDEFSUB和!#TPLENDSUB之间语句。
并且Main模板变量的内容也会产生改动:
tpl.Main的内容为:这是主模板。接上去是{SUB}
tpl.SUB的内容为:SUB子模板,另有{THIRD}
tpl.THIRD的内容为:THIRD模板。
TPLDEF和TPLEND界说的语句块充很多重嵌套。
4.模板处置:Template.Parse(Name)
参数:Name(字符串范例)是一个模板变量。
将模板顶用花括号括起来的字串用同名的模板变量的内容交换。
例子:续上例
%=tpl.Parse(Main)%
显现:这是主模板。接上去是SUB子模板,另有{THIRD}
由例子可知,Parse只交换Main模板中的{SUB}变量,而不克不及嵌套交换下往。这是为了增添程序天真性而存心计划的。那末该怎样完全显现Main模板呢?
例子:
tpl.SUB=tpl.Parse(SUB);//先处置SUB变量,再处置Main变量。
Response.write(tpl.Parse(Main));
5.自界说模板变量。
自界说模板变量很复杂,能够间接用赋值语句来界说和修正任何变量:
例子:
tpl.Hahaha=这是自界说变量;
tpl.THIRD=改动原模板中的THIRD变量;
必要注重的是,因为JScrip是辨别巨细写的,因而必定要注重巨细写的拼写。一样平常来讲,HTML模板中界说的模板变量都用年夜写。
别的,模板中利用的TplPath,Load,Parse,Split变量是外部利用的,不要挪做它用,不然程序将大概产生非常。
上面举个完全的例子:
第一步:先创建Html模板文件。
这里先申明HTML模板文件的构成。起首,它和一般的HTML文件几近没有区分,只不外多了几个标志。
模板的标志有两种。让我们先看一个例子:
TEST.HTM
<P>-
!文件名:TEST.HTM
HTML
TITLE典范/TITLE
HEADER
/HEADER
BODY
这是一个表格典范。
TABLE
!#TPLDEFMAXX10!#TPLENDMAXX
!...注重,此处利用了一个技能即界说了MAXX模板变量并赋值为10。
TR
TDX/TDTDX的平方/TD
/TR
!#TPLDEFROW
TR
TD{X}/TDTD{XX}/TD
/TR
!#TPLENDROW
/TABLE
以上共有{COUNT}行数据。
/BODY
/HTML
-
从下面能够看出,象{X},{XX},{COUNT}之类的暗号是界说模板变量。它们将会在ASP程序中被替换。
而!#TPLDEFROW...!#TPLENDROW是界说一个语句块ROW。在ASP程序中就能够将ROW块反复屡次。
第二步:计划ASP程序。
TEST.ASP
<P>-
%@Language=JScript%
!#includefile=Template.JScript.INC
%
vartpl=newTemplate(c:Inetpubwwwroot);
varstr=;
vari;
tpl.Load(Main,TEST.HTM);
tpl.Split(Main);
tpl.COUNT=0;
for(i=1;i=tpl.MAXX;i++)//tpl.MAXX在模板中界说为10。
{
tpl.X=i;
tpl.XX=i*i;
str+=tpl.Parse(ROW);
tpl.COUNT++;
}
tpl.ROW=str;
tpl.MAXX=;//清空此模板变量,以免被显现出来。
%
%=tpl.Parse(Main)%
-
下面的程序将显现一个1到10的平方表。
一般在利用模板的情形下,都只需在最初一行加上显现页面的语句。因而全部程序显得非常明晰。此时,只需对模板文件举行编纂,就能够改动全部页面的表面。
至于模板文件,它能够是任何文件,如HTML文件、ASP文件,乃至是程序自己!,并且在一个程序中能够装载多个模板共同利用,如许,不但具有极年夜天真性,并且模板文件与ASP程序的相干性可减到最低水平。
好好使用模板,将会使你的事情加倍轻松。
附:Template源程序
!文件名:Template.JScript.INC
%
/*********************************************************/
/*TemplateClass*/
/*Author:*/
/*Date:6-09*/
/*********************************************************/
//TemplateMethodDefine
functionTemplate_Parse(name)
{
if(this[name]==null)
return;
varreg=newRegExp({(w*)},ig);
varstr=newString(this[name]);
vararr=str.match(reg);
vari;
if(arr!=null)
for(i=0;iarr.length;i++)
{
key=arr.slice(1,-1);
reg=newRegExp(arr,ig);
if(this[key]!=null)
str=str.replace(reg,this[key]);
}
returnstr;
}
functionTemplate_Split(name)
{
varlen=0;
vararr;
if(this[name]==null)
return;
varTemplate_Exp=newRegExp(!#TPLDEF+(w*)*((.|
)*)!#TPLEND+1*,i);
while(this[name].search(Template_Exp)!=-1)
{
arr=this[name].match(Template_Exp);
this[arr[1}=arr[2];
this[name]=this[name].replace(Template_Exp,{+arr[1]+});
this.Split(arr[1]);
}
}
functionTemplate_Load(name,filename)
{
varfso=newActiveXObject(Scripting.FileSystemObject);
varfile=fso.BuildPath(this.TplPath,filename);
if(fso.FileExists(file))
{
varf=fso.OpenTextFile(file,1);
this[name]=f.ReadAll();
}
}
//TemplateConstructor
functionTemplate(path)
{
//Property
this.TplPath=path;
//Method
this.Parse=Template_Parse;
this.Split=Template_Split;
this.Load=Template_Load;
}
%
当然了,现在国内CRM厂商的产品与其说是CRM,但从至少从我的角度分析上来看,充其量只是一个大型的进销存而已了,了解尚浅,不够胆详评,这里只提技术问题 |
|