将显示刚才读进来的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
以下是引用片段:
-
!文件名: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
以下是引用片段:
-
%@language=jscript%
!#includefile=template.jscript.inc
%
vartpl=newtemplate(c:\inetpub\wwwroot);
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*)*((.|\n)*)!#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;
}
% >
3
如对本文有疑问,
点击进行留言回复!!
网友评论