<b>浅谈 ASP 模板技术之参数传递</b>

在内容系统开发中,涉及内容和形式分离的过程,也就是根据用户自定义页面模板然后替换成相关内容的过程。这和外面很多整站的内容管理系统,有本质上的区别。有不少内容管理系统,多少人用,都是一个样子,因为页面无法自定义,不懂编程的用户无法修改。象那种,只填几个参数就出来的网站,我估计是没有什么前途的。因为人人都是一个样子,人人都是会填那些参数的。

举个例子,你查看一下以下几个站点,你会认为他们是一套程序吗?
www.blueidea.com
http://pages.blueidea.com
http://digi.blueidea.com
http://dsp.blueidea.com
http://www.dcshooter.com

如果我告诉你,他们都是一个程序,只是由相关的站长,设计不同的模板得到的页面显示,你就会发现,这个系统的优良性。

当然由于这套系统的高端性,目前普通用户无法使用,于是我开发了我自己的内容管理系统 kiss 内容管理系统。

而要给用户一个模板系统,首先,就是要有一个简单易懂的标记系统。大家看看下面的代码,看是否容易理解:
<tag:loop channelid="1" pagesize="10" title="20" type="NEW" column="1">

略有HTML经验的人,就知道,这是一个模板标记里的循环标记,因为这是最常用的,你看我们网站的首页,列出10条文档也就只需要写一个这样的标记就完成了,这是不是让不明白编程的人,也很容易做出自己设计的页面出来呢?

参数说明:
channelid 为一个栏目的在数据库中的ID
pagesize 为列举多少个文档
title 为标题的长度
type 为列表列型,这里的”NEW”我们设定为最新的文档
column 为显示几列

以上介绍是给不会编程,或者对不了解内容系统的人做个普及,并且给我的内容管理系统打个广告,而且我想说的是,蓝色理想站点用的内容管理系统模板模块,要比我的强大很多。

下面轮到程序员了,其它人可以不用往下看。
那么怎么把它们的值读出来呢?
下面这个函数是最后的,用来解析所有模板的内容

复制代码 代码如下:

'【功能】自定义模板标签

Function ProcessCustomTags(ByVal sContent)

         Dim objRegEx, Match, Matches

      '建立正则表达式

         Set objRegEx = New RegExp

      '查找内容

         objRegEx.Pattern = "<tag:.*/>"

      '忽略大小写

         objRegEx.IgnoreCase = True

      '全局查找

         objRegEx.Global = True

      'Run the search against the content string we've been passed

         Set Matches = objRegEx.Execute(sContent)

      '循环已发现的匹配

         For Each Match in Matches

         'Replace each match with the appropriate HTML from our ParseTag function

         sContent = Replace(sContent, Match.Value, ParseTag(Match.Value))

         Next

      '消毁对象

         set Matches = nothing

         set objRegEx = nothing

      '返回值

         ProcessCustomTags = sContent

End Function

  在上面的代码中,用到了正则表达式,如果你对它还不是很了解,请参阅相关资料,这里就不详细介绍了。

那么怎么取出参数值呢,也是一个函数:代码拷贝框
复制代码 代码如下:
'【功能】取得模板标签的参数名
'如:<tag:loop channelid="1" pagesize="10" title="20" type="NEW" column="1">
function GetAttribute(ByVal strAttribute, ByVal strTag)
      Dim objRegEx, Matches
      '建立正则表达式
         Set objRegEx = New RegExp
      '查找内容 (the attribute name followed by double quotes etc) 
         objRegEx.Pattern = lCase(strAttribute) & "=""[0-9a-zA-Z]*"""
      '忽略大小写
         objRegEx.IgnoreCase = True
      '全局查找
         objRegEx.Global = True
      '执行搜索
         Set Matches = objRegEx.Execute(strTag)
      '如有匹配的则返回值, 不然返回空值
         if Matches.Count > 0 then
              GetAttribute = Split(Matches(0).Value,"""")(1)
         else
              GetAttribute = ""
         end if
      '消毁对象
         set Matches = nothing
         set objRegEx = nothing
end function

OK好了,那怎么解析像上面<tagloop:>内容呢?
下面就是一个函数:

复制代码 代码如下:

'【功能】解析并替换相应的模板标签内容

function ParseTag(ByVal strTag)

      dim arrResult, ClassName, arrAttributes, sTemp, i, objClass

      '如果标签是空的则退出函数

         if len(strTag) = 0 then exit function

      'Split the match on the colon character (:)

         arrResult = Split(strTag, ":")

      'Split the second item of the resulting array on the space character, to

         'retrieve the name of the class

         ClassName = Split(arrResult(1), " ")(0)

         'Use a select case statement to work out which class we're dealing with

         'and therefore which properties to populate etc

         select case uCase(ClassName)

         'It's a loop class, so instantiate one and get it's properties

         case "LOOP"

                     set objClass = new LOOP_Class

                     LOOP.Channelid= GetAttribute("channelid", strTag")

                     LOOP.Pagesize= GetAttribute("pagesize", strTag")

                     LOOP.title = GetAttribute("title", strTag")

                     LOOP.type = GetAttribute("Type", strTag")

                     ParseTag = LOOP.column (GetAttribute("column", strTag"), true)

                     'Destroy our class object

                     set objClass = nothing

         end select

end function

上面的loop是一个类,这里也不再详说了。因为好久没有说话了,不太习惯,呵呵。

  结论,通过上面的函数,你可以很快的编写相关的模板程序了。希望对你有帮助。

时间: 2024-09-26 05:08:17

<b>浅谈 ASP 模板技术之参数传递</b>的相关文章

浅谈 ASP 模板技术之参数传递

模板 在内容系统开发中,涉及内容和形式分离的过程,也就是根据用户自定义页面模板然后替换成相关内容的过程.这和外面很多整站的内容管理系统,有本质上的区别.有不少内容管理系统,多少人用,都是一个样子,因为页面无法自定义,不懂编程的用户无法修改.象那种,只填几个参数就出来的网站,我估计是没有什么前途的.因为人人都是一个样子,人人都是会填那些参数的. 举个例子,你查看一下以下几个站点,你会认为他们是一套程序吗?www.blueidea.comhttp://pages.blueidea.comhttp:/

浅谈 ASP 模板技术之参数传递_ASP基础

在内容系统开发中,涉及内容和形式分离的过程,也就是根据用户自定义页面模板然后替换成相关内容的过程.这和外面很多整站的内容管理系统,有本质上的区别.有不少内容管理系统,多少人用,都是一个样子,因为页面无法自定义,不懂编程的用户无法修改.象那种,只填几个参数就出来的网站,我估计是没有什么前途的.因为人人都是一个样子,人人都是会填那些参数的. 举个例子,你查看一下以下几个站点,你会认为他们是一套程序吗?www.blueidea.comhttp://pages.blueidea.comhttp://di

浅谈ASP.NET MVC 3中如何使用Model

昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^ 原文地址:http://www.youguanbumen.net/Article.aspx?id=79 原文: 前两天写了个文章ASP.NET MVC 3 -- Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见

浅谈ASP中Request对象获取客户端数据的顺序

request|对象|客户端|数据 浅谈ASP中Request对象获取客户端数据的顺序 /**描述:在使用ASP Request对象时需要注意的小问题作者:慈勤强Email : cqq1978@yeah.net**/ 在ASP中Request对象是获取客户端提交数据的一个很重要的对象,大家对他也是非常熟悉了.虽然如此,还是经常有人问我下面的几种写法有什么不同,到底应该怎么写?strMessage = Request("msg")strMessage = Request.Form(&qu

浅谈ajax请求技术_AJAX相关

1.写在前面: 阅读要求: 具有一定的HTML.CSS.JavaScript.Json基础 2.什么是ajax Ajax:即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. 3.为什么使用ajax 在动态网页开发技术中,客户端(通常是浏览器)与服务端进行数据交互是十分频繁的,如何节省网络资源,提供良好的用户体验是十分关键的.Ajax采用异步请求方式,使得不用刷新整个页面就可以和后台实现数据

浅谈大数据处理技术架构的演进

浅谈大数据处理技术架构的演进 任桂禾 王晶 新兴应用对大数据处理技术架构的实时性要求不断提高,这对传统的大数据处理技术架构提出严峻的挑战.必须转变架构满足大数据相关业务的实时性要求.文章介绍Hadoop离线处理架构的瓶颈以及Storm实时处理架构的优点,同时,结合实际项目中变更大数据处理技术架构的经验,阐述在实施架构变更过程中的关键技术,实验结果证明使用变更后的技术架构可以满足业务的实时性要求. 浅谈大数据处理技术架构的演进

浅谈ajax请求技术

1.写在前面: 阅读要求: 具有一定的HTML.CSS.JavaScript.Json基础 2.什么是ajax Ajax:即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. 3.为什么使用ajax 在动态网页开发技术中,客户端(通常是浏览器)与服务端进行数据交互是十分频繁的,如何节省网络资源,提供良好的用户体验是十分关键的.Ajax采用异步请求方式,使得不用刷新整个页面就可以和后台实现数据

浅谈ASP.NET的Postback

说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编程的角度,撇开Web Page 的生命周期浅谈Postback. 我们知道,无论是ASP.NET1.x,2.0,甚至是以后的版本,ASP.NET最终Render到Client端通过浏览器浏览的都是一样:一个单纯的HTML.Client通过Submit Form的方式将填入Form的数据提交给Server进行处理.我们现在来看看ASP.NET整个

一起谈.NET技术,浅谈ASP.NET MVC

在正式的工作中使用ASP.NET MVC也有一阵子了,也看了听了很多关于ASP.NET MVC别人的想法和代码,我认为很多人对于它的理解是错误的. 在这里我只谈谈对ASP.NET MVC我的一些想法,希望大家多多讨论. 1. ASP.NET MVC区别于ASP.NET在于设计理念 我听过的关于ASP.NET  MVC的第一个看法是ASP.NET MVC最大的特点在于Controller和View的分离,当时我还不懂ASP.NET MVC是什么东西,但是当我第一眼看到这个框架时,我就认为这个观点是