CMS风格样式存取问题

稿件来源: 太阳光网页设计   撰稿作者: 太阳光   发表日期: 2009-9-12 21:37:10   阅读次数: 288   查看权限: 游客查看

CMS系统为了方便即时修改网站风格,采用样式与程序分开方法。如飞腾使用数据库把HTML及标签存起来,方便随时修改。但加载就成为一个复杂的过程。

CMS系统为了方便即时修改网站风格,采用样式与程序分开方法。如飞腾使用数据库把HTML及标签存起来,方便随时修改。但加载就成为一个复杂的过程。我们先来了解飞腾系统的加载过程,其他CMS系统也是差不多:

第一:运行每个页面前,先读取数据库调出风格代码。

ASP/Visual Basic代码
  1. Sql="Select mb_name,mb_main,mb_index,mb_news,mb_art,mb_soft,mb_user,mb_pic,mb_dj,mb_gb,mb_search,mb_other From [Ft_mb_style] Where mb_id="&i_Skin   
  2. Set Rs=Server.CreateObject("adodb.recordset")   
  3. Rs.open Sql,conn,1,1   
  4. If Rs.Eof and Rs.Bof Then  
  5.     Response.write "<script>alert('风格设置错误,请进入后台基本设置里设置新风格!');location.href='index.asp?skin="&ftwebstyle()"';</script>"  
  6.     Response.end   
  7. Else  
  8.     mb_name=Rs(0)   
  9.     mb_main=Rs(1)   
  10.     mb_index=Rs(2)   
  11.     mb_news=Rs(3)   
  12.     mb_art=Rs(4)   
  13.     mb_soft=Rs(5)   
  14.     mb_user=Rs(6)   
  15.     mb_pic=Rs(7)   
  16.     mb_dj=Rs(8)   
  17.     mb_gb=Rs(9)   
  18.     mb_search=Rs(10)   
  19.     mb_other=Rs(11)   
  20.     Response.Cookies(webname)("Skin")=i_Skin   
  21. End If  
  22. Rs.Close:Set Rs=Nothing  
  23. StrTemp=Split(mb_main,"|||@@@|||")   
  24. SignImgPath=StrTemp(5)   
  25. m_css=Replace(StrTemp(0),"{PicUrl}",SignImgPath)   
  26. m_top=Replace(StrTemp(1),"{PicUrl}",SignImgPath)   
  27. m_foot=Replace(StrTemp(2),"{PicUrl}",SignImgPath)   
  28. m_leftpub=Replace(StrTemp(4),"{PicUrl}",SignImgPath)   
  29. mb_main=Replace(mb_main,"{PicUrl}",SignImgPath)   
  30. mb_index=Replace(mb_index,"{PicUrl}",SignImgPath)   
  31. mb_news=Replace(mb_news,"{PicUrl}",SignImgPath)   
  32. mb_art=Replace(mb_art,"{PicUrl}",SignImgPath)   
  33. mb_soft=Replace(mb_soft,"{PicUrl}",SignImgPath)   
  34. mb_user=Replace(mb_user,"{PicUrl}",SignImgPath)   
  35. mb_pic=Replace(mb_pic,"{PicUrl}",SignImgPath)   
  36. mb_dj=Replace(mb_dj,"{PicUrl}",SignImgPath)   
  37. mb_gb=Replace(mb_gb,"{PicUrl}",SignImgPath)   
  38. mb_search=Replace(mb_search,"{PicUrl}",SignImgPath)   
  39. mb_other=Replace(mb_other,"{PicUrl}",SignImgPath)  

以上就是读取代码,它必须把所有风格读出,并分别使用不同变量存起来,还需要对它进行第一次替换,就是风格地址的替换。这里就存在一个浪费:不管你查看哪个页,都必须执行这些过程,同时这里的变量也就是风格内容算是一个比较大的变量,至少几千个字符。我也曾试着看能不能使用别的方法来存取,能不能只读一次,以后就不读了?试过使用Application对象、也考虑过Session\Cookies,但发觉都不行。

第二:取出共用风格。

ASP/Visual Basic代码
  1. StrTemp=split(mb_art,"|||@@@|||")   
  2. Ft_mbstr=Replace(StrTemp(0),"{left_pub}",m_leftpub)   
  3. Ft_mbstr=head()+Ft_mbstr+foot()   
  4. Call PubFunction(Ft_mbstr)  

以上就是取出共用风格,有公用头与脚与共用左边搜索的风格,并且进行替换与执行公用函数转换,这些转换与替换又需要花一点时间,开始替换过程我们是这样写的:

ASP/Visual Basic代码
  1. str=Replace(str,"$indexdj$",IndexDj())   
  2. str=Replace(str,"$indexgb$",IndexGb())   
  3. ......  

这是我们最常见的替换函数,但它用起来会花时间。因为替换前必须先运行IndexDj()函数,并取出值。而这函数又是一个常见的查找数据库罗列数据的过程。一但出现错误那么就替换不成功,这就是为什么有时网友看到自己网站中会出现$xxx$这类的标签。后来飞腾加了一句判断代码:If Instr(str,"$indexgb$")>0 Then str=Replace(str,"$indexgb$",IndexGb()) 先判断存不存此标签再替换,不存在就不替换,在一定程序上加快了加载过程。

第三:替换本页固有标签

这个过程就是我们网站分页里大部分的代码,读取数据库数据并循环替换标签,最后替换加载时间与全部内容输出。这过程算是完成了。飞腾进入V3。0后风格使用了DIV+CSS,加载速度虽然有改进但感觉还是无法从根本解决这问题。也有其他网站使用的是HTML文件模板,也就是说模板不存入数据库,而是生成一个HTML文件,使用FSO读取再进行替换。速度上我没有比较过是数据库快还是FSO读取文件快。而我们初学的ASP文件是代码与HTML混合写的,不需要替换过程,由上往下直接加载,速度上当然快。最原始的东西也就成了最好的方式。

由此我也一直在考虑有没有更好的方法加载模板?如果使用最原始方法,在线修改ASP文件,无疑是最好的方法。但安全问题无法保证,在线能写ASP代码,这可太危险了!包括有些网站在线生成ASP文件都是危险的,因为别人随时可以加入木马代码。或者使用XML文件?XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,又有一点类似数据库。而且XML做数据表非常好,但有一个问题就是xml与IE能完美结合,与别的浏览器就不那么完美了,这点让人心痛。不过话说回来XML是个不错的东西,建议大家学习一下。还有它用来做FLASH的数据库是个非常不错的选择。

好了,就写到这,主要是让大家了解CMS系统加载风格过程,也欢迎大家对此发表自己的见解。如果你有更好的方法不防交流一下!

关键词: 风格样式,cms,飞腾cms   编辑时间: 2010-3-12 10:52:04

  • 感到高兴

    1

    高兴
  • 感到支持

    0

    支持
  • 感到搞笑

    0

    搞笑
  • 感到不解

    0

    不解
  • 感到谎言

    0

    谎言
  • 感到枪稿

    0

    枪稿
  • 感到震惊

    0

    震惊
  • 感到无奈

    0

    无奈
  • 感到无聊

    0

    无聊
  • 感到反对

    0

    反对
  • 感到愤怒

    0

    愤怒
0%(0)
0%(0)
上一篇:常用JS代码
下一篇:js操作select
共有0 条评论 发言请遵守【相关规定

网友评论

会员头像
发 表同步腾讯微博  匿名评论  验证码:  点击更新
  • 暂无评论
关闭模块文章图片 article Pictrue
  • 代码覆盖率工具 Istanbul 入门教程
  • 全栈工程师的武器——MEAN
  • 9款超炫的 CSS3 复选框(Checkbox)
  • 微信开发在线翻译功能
  • CSS3那些不为人知的高级属性
  • 给easyui的datebox添加清空事件
  • flash写字效果
  • kendoUI系列教程之DropDownList下拉菜单
  • kendoUI系列教程之datetimepicker日期时间选择
  • kendoUI系列教程之datepicker日期选择
  • kendoUI系列教程之combobox下拉列表框
  • kendoUI系列教程之colorpicker
  • kendoUI系列教程之calendar日历表
  • kendoUI系列教程之autocomplete自动补齐
  • kendo ui简介
  • QQ登录网站实战教程