动易swCMS6.5网站皮肤与代码分离技术的原理
动易网站的皮肤,即前台页面。均制作成包含各种动易标签的模板文件
模板内容以文字形式保存在数据库中
通过位于文件PowerEasy.Common.Front.asp中的
函数GetTemplate(iChannelID, TemplateType, TemplateID)从数据库中获取模板内容
并可在后台对各种不同的模板进行更换和修改
动易网站的模板包括:网站首页模板,各频道,栏目,专题,内容等页面的模板
以及其他的会员页,公告页,投票页,友情链接页等模板
完整的模板页可作为一个网站的模板方案来使用
模板内容包含的动易标签分3类:普通标签,函数标签,超级函数标签
模板文件的设计制作将在文章《动易模板的设计思路》中详细描述
现通过对动易网站首页的“皮肤与代码分离技术”的分析对其原理有大致的了解
网站首页Index.asp通过调用过程GetHTML_SiteIndex()获取其替换标签后的模板内容:
Call GetHTML_SiteIndex
该过程位于文件PowerEasy.SiteIndex.asp中
该过程的代码首先获取网站首页的模板内容
接着替换模板中的普通标签,即网页包含的公共标签
strHtml = GetTemplate(0, 1, 0)
Call ReplaceCommonLabel
然后替换网页标题,导航条,菜单JS文件,CSS样式文件的标签:
strHtml = Replace(strHtml, "{$PageTitle}", SiteTitle & " >> " & "首页")题
strHtml = Replace(strHtml, "{$ShowPath}", strNavPath)
strHtml = Replace(strHtml, "{$MenuJS}", GetMenuJS("", False))
strHtml = Replace(strHtml, "{$Skin_CSS}", GetSkin_CSS(0))
RSS和WAP先判断网站首页是否开通后才决定是否替换{$Rss}和{$Wap}两标签
以下为各功能模块通过调用其类方法GetCustomFromTemplate()获取模板内容中相应的动易标签后,
调用标签替换函数GetCustomFromLabel()将该标签替换,并返回替换后的模板内容:
依次对属于文章,下载,图片,商品等功能模块的各种动易标签进行替换:
只列出替换文章功能模块的各种标签来举例:
Set PE_Content = New Article
PE_Content.Init
strHtml = PE_Content.GetCustomFromTemplate(strHtml)
strHtml = PE_Content.GetPicFromTemplate(strHtml)
strHtml = PE_Content.GetListFromTemplate(strHtml)
strHtml = PE_Content.GetSlidePicFromTemplate(strHtml)
Set PE_Content = Nothing
由于以上调用的是Article类的方法完成标签的替换
所以以上类方法的函数代码位于文件PowerEasy.Article.asp中
类方法GetCustomFromTemplate()的作用简述:
网站首页的模板内容作为其函数参数传递进来
用一个正则表达式判断模板内容中包含的标签是否为该函数所需替换的标签
regEx.Pattern = "【ArticleList/((.*?)/)】([/s/S]*?)【//ArticleList】"
若是,则获取符合的所有标签集合,并循环执行替换所有的标签
Set Matches = regEx.Execute(strCustom)
For Each Match In Matches
Match.value即为模板内容中符合的标签
循环中通过调用其子函数GetCustomFromLabel()获取标签替换后的内容
最后通过一个替换函数PE_Replace()完成该标签的替换
strCustom = PE_Replace(strCustom, Match.value, GetCustomFromLabel(strParameter, Match.SubMatches(1)))
strCustom为替换该标签后的模板内容
继续执行循环知道所有符合的标签完全替换
函数GetCustomFromLabel()简介:
前面提到了GetCustomFromLabel()作为类方法GetCustomFromTemplate()的子函数
其作用就是获取与标签对应的HTML内容
函数的代码通过一系列判断后从数据库获取数据并对自定义的标签列表进行替换
由于该代码比较复杂,作为本站“皮肤和代码分离技术”的重点和难点
并涉及到正则表达式的一些知识点的应用
所以以后要对这些方法和函数代码的细节进行阅读和研究才能很好掌握和运用这项技术
综述,要理解网站首页皮肤和代码分离技术的应用实例
可重点了解以下文件中的方法和函数代码:
Index.asp
Call GetHTML_SiteIndex
'获取网站首页的html内容
PowerEasy.SiteIndex.asp
GetHTML_SiteIndex()
PowerEasy.Common.Front.asp
ReplaceCommonLabel()
‘替换普通标签的函数
PowerEasy.Article.asp
GetCustomFromTemplate()
GetCustomFromLabel()
GetPicFromTemplate()
GetPicFromLabel()
GetListFromTemplate()
GetListFromLabel()
GetSlidePicFromTemplate()
GetSlidePicFromLabel()
补充:ReplaceContentLabel()为替换文章内容页标签的函数
其他功能模块的标签替换的思路都和文章功能模块的相同
而且类方法和函数代码也类似,这里不一一列举
有些前台页面的标签替换程序就写在该文件内,例如:
投票结果显示页Vote.asp
公告内容页Announce.asp
如故标签替换程序比较复杂,可考虑将这些程序写成一个函数以便调用,例如:
公告列表页Announcelist.asp的函数GetCustomFromLabel(strTemp, strList)
而专题列表页SpecialList.asp则类似于网站首页Index.asp的方式
通过调用属于自己标签替换函数的页面来完成替换任务
SpecialList.asp调用PowerEasy.SiteSpecial.asp的过程GetHtml_Special()
Index.asp调用PowerEasy.SiteIndex.asp的过程GetHTML_SiteIndex()