CMS系统模版引擎设计:基础类型

上传人:lisu****2020 文档编号:100100735 上传时间:2022-06-02 格式:DOC 页数:8 大小:36KB
收藏 版权申诉 举报 下载
CMS系统模版引擎设计:基础类型_第1页
第1页 / 共8页
CMS系统模版引擎设计:基础类型_第2页
第2页 / 共8页
CMS系统模版引擎设计:基础类型_第3页
第3页 / 共8页
资源描述:

《CMS系统模版引擎设计:基础类型》由会员分享,可在线阅读,更多相关《CMS系统模版引擎设计:基础类型(8页珍藏版)》请在装配图网上搜索。

1、写博文写教程性质的内容,大家比较喜欢,具体的项目设计方案关注的人比较少,而且思路也不一定说的清楚,本身写博文就比较辛苦,作者再偷点懒,那基本上就是一篇废文。尽管如此,我还是想写一下我做过的一个项目的模块设计CMS的模版引擎。呵呵,叫成“引擎”就是夺人眼球而已。其实就是一个标签解释的过程模块。做过网站的朋友都对CMS很熟悉,有的朋友也接触过N多CMS系统,国内比较流行的有dedeCMS,phpCMS,帝国CMS,KingCMS,PowerEasyCMS等等,他们都有个共同的特点,就是前台的实现是模版标签机制。标签的好处就是可以让非专业开发人员通过特定的标签实现数据调用。一段标签表示一种数据的调用

2、。那我的这个CMS也是干这事的,不过是用.NET实现的。实现思路也是自己琢磨出来的,如有雷同,那真是太巧合了:)从哪里开始讲呢?还是从业务开始吧!当公司接到一个网站的单子后,就要估算价格。估算价格一般都要问开发经理这个网站的开发周期和难度(方便忽悠好要价),开发经理也就是我们技术leader,他会估算该网站大概需要多少页面,需要什么子模块,需要干多久(假如没有CMS的话)。呐,这里就有个重要的信息,就是需要多少页面和什么模块。做一个网站我们肯定要考虑他的功能模块,也要考虑多少页面。功能模块一般有 文章、图片(相册)、视频、投票、留言、评论、下载、单页、自定义表单等等。我们介绍模版,这些功能模块

3、就不多提了。页面的概念便是需要多少去制作的Page.aspx。一般有首页(子站首页)、封面页(可以理解为栏目封面)、列表页、详情页、独立页(关于我们之类的),不同的数据类型还不一定一致,比如新闻和下载都是不一样的页。而模版的话不可能是要制作人员创建aspx的,他们只会用模版。所以通过这些信息我们能想到需要设计哪些类呢?Page类、Template类、Label类,页面、模版和标签。Label涉及到具体的标签系列,咱暂且不说,先看Template如何设计?一个模版有何设计的?有的CMS系统就是直接读取静态文件,但是我说这样不好,我们要在代码里有他的具体类型才能更方便的处理。代码 /模版类/pub

4、licclassTemplate/模版ID/publicGuidTemplateIdget;set;/模版名称/publicstringNameget;set;/模版内容/publicstringContentget;set;/是否为部分视图/publicboolIsPartialget;set;初步设计就是如此,增加了一个IsPartial属性,因为我们的模版或许会作为部分视图在其他模版里调用,就像UserControl一样。那么Page类的设计就略显复杂了。我们想访问一个Page起码要有访问路径吧,所以就要有一个UrlPattern属性,也就是访问规则,因为像详细页一般只是参数的变化,所以

5、URL不能写死,只能是一个规则。既然有规则,也会有一些参数,而且参数不一定是?name=value形式,可能是/value/value1形式,所以我们还得设计一个UrlPattern类。代码 /Url访问规则/publicclassUrlPattern/具体规则/publicstringPatternget;set;/正则引擎/publicRegexRegexget;set;/参数列表/publicstringParametersget;set;/获取某个参数的值/当前访问的URL/参数名/publicstringGetValue(stringrawurl,stringname)throwne

6、wSystem.NotImplementedException();是的,你没看错,我们要用正则表达式,这可能是对制作人员难度最大的部分。:)不过可以教他们初级的写法,可以应付绝大多数需求。比如我写一个规则如下 /details/(?d+),这个表明参数名为articleid,访问规则就是 “/details/数字”Page除了访问URL外还要有缓存的概念,不然我们如何提升性能,你说是不?!缓存可能还会用标签里去,因为如果Page不缓存只是缓存了某个标签,所以Label也要有缓存,那么我们是否需要设计一个缓存类呢?代码 /Page/Template/Label的缓存/publicclassCa

7、che/缓存名/publicstringKeyget;set;/缓存秒数/publicintCacheSecondsget;set;/获取缓存数据/publicobjectGetData()thrownewSystem.NotImplementedException();/移除缓存/publicvoidRemove()thrownewSystem.NotImplementedException();/更新缓存/publicvoidSetData(objectdata)thrownewSystem.NotImplementedException();那么Page类还应该有什么?Labels!是的

8、,我们不可能每次都去解释模版来获取所有的Label,而是Page被缓存后我们只需要访问他的LabelCollection即可。那么我们来看下Page的设计雏形吧。代码/Page类/publicclassPage/ID/publicGuidPageIdget;set;/名称/publicstringNameget;set;/标题/publicstringTitleget;set;/关键字/publicstringKeywordsget;set;/描述/publicstringDescriptionget;set;/模版/publicTemplateTemplateget;set;/访问路径规则/

9、publicUrlPatternUrlPatternget;set;/标签/publicLabelLabelsget;set;/缓存/publicCacheCacheget;set;/显示HTML代码/publicvoidRender()thrownewSystem.NotImplementedException();不错哦,袄哟,不错哦。其实对于大型的站点,子站的概念是不可缺少的。或者我们的CMS需要支持多站点,那么还需要一个Site类。代码/站点/publicclassSite/站点ID/publicGuidSiteIdget;set;/站点名称/publicstringNameget;set;/站点备注/publicstringNoteget;set;/站点域名/publicstringDomainsget;set;/站点状态/publicStatusStatusget;set;/站点的页面/publicPagePagesget;set;站点一般包含多个可访问的域名,所以有个Domains。当然站点包含N个Page。好啦,初步的设计就到这了,下节我们讲怎么让这些类运作起来。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!