代码与页面的分离

为了避免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%>,然后再包含模板程序文件:<!--#include file="Template.JScript.INC"-->。

先介绍一下Template类的使用:

   1. 建立Template对象:Template(Path)

      参数:Path(字符串类型)  HTML模板文件的存放路径。

      使用new 操作符建立Template对象。

例子:

      var tpl = new Template("c:\\template");

在程序中可以用tpl.TplPath来取得模板路径,也可以通过tpl.TplPath来改变模板路径。

      如:

      tpl.TplPath = "d:\\template";

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内容为:

      -------------------

      这是主模板。接下来是:<!--#TPLDEF SUB-->SUB子模板,还有

        <!--#TPLDEF THIRD-->THIRD模板。<!--#TPLEND THIRD-->

      <!--#TPLEND SUB-->

      -------------------

      那么:

      tpl.Split("Main");

      执行以后,就会生成新的模板变量"SUB",和"THIRD",它们的内容就是<!--#TPLDEF SUB-->和<!--#TPLEND SUB-->之间语句。

      而且"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>

   <!--#TPLDEF MAXX-->10<!--#TPLEND MAXX--> 

     <!--...注意,此处使用了一个技巧即定义了MAXX模板变量并赋值为10。-->

     <TR>

       <TD>X</TD><TD>X的平方</TD>

     </TR>

    <!--#TPLDEF ROW-->

     <TR>

       <TD>{X}</TD><TD>{XX}</TD>

     </TR>

    <!--#TPLEND ROW-->

   </TABLE>

   以上共有{COUNT}行数据。

  </BODY>

  </HTML>

  -----------------

从上面可以看出,象{X},{XX},{COUNT}之类的记号是定义模板变量。它们将会在ASP程序中被替代。

  而<!--#TPLDEF ROW-->...<!--#TPLEND ROW-->是定义一个语句块"ROW"。在ASP程序中就可以将"ROW"块重复多次。

第二步:设计ASP程序。

TEST.ASP

  -------------------

  <%@Language=JScript%>

  <!--#include file="Template.JScript.INC"-->

  <%

    var tpl = new Template("c:\\Inetpub\\wwwroot"); 

    var str="";

    var i;

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-->

<%

/*********************************************************/

/* Template Class                                        */

/* Author:                           */

/* Date:   6-09                                     */

/*********************************************************/

//Template Method Define

function Template_Parse(name)

{

 if(this[name]==null)

   return "";

var reg = new RegExp("{(\\w*)}","ig");

 var str = new String(this[name]);

 var arr = str.match(reg);

 var i;

if(arr != null)  

   for(i=0;i<arr.length;i++)

   {

     key = arr.slice(1,-1);

     reg = new RegExp(arr,"ig");

     if(this[key]!=null)

       str = str.replace(reg,this[key]);

   }

 return str;

}

function Template_Split(name)

{

 var len = 0;

 var arr;

if(this[name]==null)

   return;

var Template_Exp = new RegExp("<!--#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]);

 }

}

function Template_Load(name,filename)

{

 var fso = new ActiveXObject("Scripting.FileSystemObject");

 var file = fso.BuildPath(this.TplPath, filename);

 if(fso.FileExists(file))

 {

   var f = fso.OpenTextFile(file, 1);

   this[name] = f.ReadAll();

 }

}

//Template Constructor

function Template(path)

{

 //Property

 this.TplPath = path;

//Method

 this.Parse = Template_Parse;

 this.Split = Template_Split;

 this.Load = Template_Load;

}

%>

时间: 2024-08-01 06:46:11

代码与页面的分离的相关文章

用模板实现代码和页面的分离

模板|页面 为了避免ASP程序和HTML代码混写造成维护困难的情况,本文介绍了一种方法,利用模板来分离程序和页面,使程序设计更加轻松. 在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况.这样子做有许多缺点: 1. 且不说编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范: 2. 当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护. 那么,要如何才能避免这些麻烦呢? 答案就是使用模板文件,将ASP代码和HTML页面分

Asp中代码与页面的分离

页面 为了避免ASP程序和HTML代码混写造成维护困难的情况,本文介绍了一种方法,利用模板来分离程序和页面,使程序设计更加轻松. 在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况.这样子做有许多缺点: 1. 且不说编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范: 2. 当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护. 那么,要如何才能避免这些麻烦呢? 答案就是使用模板文件,将ASP代码和HTML页面分开,一

探讨:关于Asp中代码与页面的分离

页面 为了避免ASP程序和HTML代码混写造成维护困难的情况,本文介绍了一种方法,利用模板来分离程序和页面,使程序设计更加轻松.在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况.这样子做有许多缺点:1.且不说编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范:2.当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护.那么,要如何才能避免这些麻烦呢?答案就是使用模板文件,将ASP代码和HTML页面分开,一切问题就都解决

代码与页面的分离_ASP CLASS类

为了避免ASP程序和HTML代码混写造成维护困难的情况,本文介绍了一种方法,利用模板来分离程序和页面,使程序设计更加轻松.    在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况.这样子做有许多缺点:    1. 且不说编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范:    2. 当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护.    那么,要如何才能避免这些麻烦呢?    答案就是使用模板文件,将ASP代

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

在使用ASP制作一个站点的时候,常常会出现一个ASP文件中,程序代码和HTML代码混合的情况.这样子做有许多缺点: 1.编程时就要对页面布局进行设计和编排,造成代码混乱难懂,不规范; 2.当需要改变页面外观时,你不仅要改变HTML部份,也需要改变ASP代码,不易维护. 那么,要如何才能避免这些麻烦呢? 答案就是使用模板文件,将ASP代码和HTML页面分开,一切问题就都解决了.使用模板有以下好处: 1.在很短的时间内可以替换整个站点的外观; 2.使程序员可以抽象编程,而无须接触HTML代码; 3.

使用模板实现ASP代码与页面分离

模板|页面 使用模板实现ASP代码与页面分离 每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历:ASP代码与页面HTML混淆难分,业务逻辑与显示方式绞合,使得代码难以理解.难以修改:程序编写必须在美工之后,成为项目瓶颈:整合的程序代码和HTML静态页面时,花费大量的时间才能得到理想的效果,兼作了美工.的确,用脚本语言开发Web应用不容易将数据的处理和数据的显示分开,但在多人合作的情况下,如果无法将数据和显示分开,将大大影响开发的效率,专业分工的发挥. 其它的脚本语言,如J

使用模板实现ASP代码与页面分离_ASP基础

每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历:ASP代码与页面HTML混淆难分,业务逻辑与显示方式绞合,使得代码难以理解.难以修改:程序编写必须在美工之后,成为项目瓶颈:整合的程序代码和HTML静态页面时,花费大量的时间才能得到理想的效果,兼作了美工.的确,用脚本语言开发Web应用不容易将数据的处理和数据的显示分开,但在多人合作的情况下,如果无法将数据和显示分开,将大大影响开发的效率,专业分工的发挥. 其它的脚本语言,如JSP.PHP都有自己的解决方案,ASP的后一代

电脑断电代码的页面代码全没了

问题描述 电脑断电代码的页面代码全没了 我在工作写着写着代码突然公司断电,等来电了,我打开电脑我刚才写代码的页面代码全没了,不止是没保存的没了是保存的都没了,我写了好几天的啊!有没有大神能帮恢复一下? 解决方案 文件还在吗,打开没有代码了?如果是这样,不能恢复了应该

求代码在页面中显示当天天气

问题描述 求代码在页面中显示当天天气 网站静态页面中显示当地当天天气,查看了一些网站代码,都不太合适,只显示加载数据,一直加载不完 解决方案 <iframe width=""280"" scrolling=""no"" height=""25"" frameborder=""0"" allowtransparency=""