【asp 动易】动易网络教程之系统标签解析原理

我们先看一个最简单的系统标签:{$Copyright},这个标签的作用是显示网站的版权信息,这个标签是如何解析的呢?

我们可以查找一下源代码(这里可以借助一些有查找功能的工具,比如说用DreavWeaver),可以发现在Include文件夹里面的PowerEasy.Common.Front.asp文件里面有这样一行代码(2657行左右):

   strHtml =PE_Replace(strHtml, "{$Copyright}", Copyright)

这行代码的作用就是将查找strHtml字符串的内容,然后将里面的{$Copyright}替换成Copyright这个变量的内容。

可能这里有人会有这样的疑问,strHtml是什么内容?Copyright这个变量的内容又是什么?可以这样理解,strHtml是一个字符串,字符串里面存放的是模板代码,Copyright是一个全站变量,他的内容对应网站的版权信息。

同理,我们可以增加一个最简单的系统标签,比如我们再这行代码下面加入:

strHtml = PE_Replace(strHtml, "{$MyName}", "路人甲")

那么当你在模板里面插入{$MyName}这个标签时,解析的时候就可以解析成路人甲了。

接下来我们看看{$ShowLogo}这个标签是如何解析的,往下查我们可以看到2661行左右有这样的代码:

If InStr(strHtml, "{$ShowLogo}") > 0 Then strHtml= Replace(strHtml, "{$ShowLogo}", GetLogo(180, 60))

这里是先查找是否存在$ShowLogo}这个标签,存在的话将这个标签的内容替换成GetLogo(180, 60)这个函数的内容,GetLogo(180, 60)函数是定义在哪里的?我们同样可以查找一下,在这个文件的582行左右就可以找到这个函数的定义。

到这里,可能有人会有这样的疑问,如果我们要解析的系统标签是带参数的,那系统是如何解析的?

下面我们来看一下{$ShowLogo(width,height)}这个标签是如何解析的。

带参数的系统标签跟不带参数的系统标签解析方法是不同的,我们可以看一下以下一段代码

   '替换Logo

   regEx.Pattern ="\{\$ShowLogo\((.*?)\)\}"

   Set Matches =regEx.Execute(strHtml)

   For Each Match InMatches

      arrTemp = Split(Match.SubMatches(0), ",")

      If UBound(arrTemp)<> 1 Then

          strLogo ="函数式标签:{$ShowLogo(参数列表)}的参数个数不对。请检查模板中的此标签。"

      Else

          strLogo =GetLogo(arrTemp(0), arrTemp(1))

      End If

      strHtml = Replace(strHtml, Match.Value,strLogo)

  这段代码就是查找系统函数标签的一个简单例子,我们逐句来解读一下:

regEx.Pattern = "\{\$ShowLogo\((.*?)\)\}"

这个是一个正则表达式,由于在正则表达式里面{,$,(,),}都是特殊符号,要把他转换成普通字符处理,前面需要加上“\”,(.*?)表示匹配除换行符之外的字符,也就是说程序会查找{$ShowLogo(****)}这样的内容(***代表任何除换行符外的任何字符),如果有找到这个内容,那么程序就把它当成一个系统函数标签来处理。

Set Matches = regEx.Execute(strHtml)

这里执行模式匹配,也就是在查找模板中是否存在要查找的函数标签。

For Each Match In Matches

这里对匹配的结果进行处理

arrTemp = Split(Match.SubMatches(0), ",")

Split函数的作用是分隔字符串,这段代码的作用就是对函数进行处理,用逗号来分隔,将分隔出来的存放在arrTemp数组中,也就是第一个参数存放在arrTemp(0)中,第二个参数存放在arrTemp(1)中,这样依次存放。

      If UBound(arrTemp)<> 1 Then

          strLogo ="函数式标签:{$ShowLogo(参数列表)}的参数个数不对。请检查模板中的此标签。"

      Else

          strLogo =GetLogo(arrTemp(0), arrTemp(1))

      End If

If UBound(arrTemp) <> 1Then这里是判断arrTemp这个数组有多少个数值,因为我们是从0开始计算的,第一个参数存放在arrTemp(0)中,所以这里的IfUBound(arrTemp) <> 1Then其实就是判断参数是不是2个(注意不是1个),不是的话就输出

strLogo = "函数式标签:{$ShowLogo(参数列表)}的参数个数不对。请检查模板中的此标签。"

如果参数是2个的话,就将这两个参数传递给GetLogo()这个函数,GetLogo()这个函数是带返回值的,strLogo =GetLogo(arrTemp(0), arrTemp(1))就是用strLogo这个变量来记录这个函数的执行结果。

strHtml = Replace(strHtml, Match.Value, strLogo)

这个代码就是用我们得到的结果来替换正则表达数找到的函数标签了,到此,这个系统标签的解析就算结束了。

上线团购网单团:http://www.dxtuan.net/ 多团:http://www.wodequn.com/

团购网定制:仿拉手、24卷、美团网、糯米团、团宝网==

ecshop模版定制:仿凡客、京东、趣玩、麦考林 ==

团购网、ecshop模版定制、商城制作、商城定制或修改、ecshop二次开发、最土团购网二次开发加我qq:133669450

技术交流加入Q群:40027463

精通php、asp、全站html、div+css、js、jquery、ajax、XML、photoshop、Fireworks、Flash、access\sql2000-2005\mysql、SEO搜索引擎优化

asp与php的各种系统:游戏官方、门户、点卡充值平台定制、支付接口开发、短信接口开发、抽奖系统、投票系统、oa办公系统


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值