当前位置: 移动技术网 > IT编程>开发语言>Asp > 关于Asp代码与页面的分离模板技术第1/3页

关于Asp代码与页面的分离模板技术第1/3页

2017年12月12日  | 移动技术网IT编程  | 我要评论

  将显示刚才读进来的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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网