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

上传人:pu****.1 文档编号:473301630 上传时间:2023-04-19 格式:DOCX 页数:9 大小:16.42KB
返回 下载 相关 举报
CMS系统模版引擎设计:基础类型_第1页
第1页 / 共9页
CMS系统模版引擎设计:基础类型_第2页
第2页 / 共9页
CMS系统模版引擎设计:基础类型_第3页
第3页 / 共9页
CMS系统模版引擎设计:基础类型_第4页
第4页 / 共9页
CMS系统模版引擎设计:基础类型_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《CMS系统模版引擎设计:基础类型》由会员分享,可在线阅读,更多相关《CMS系统模版引擎设计:基础类型(9页珍藏版)》请在金锄头文库上搜索。

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

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

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

4、的处理。国日代码/ summary模版类public class Template(/ /模版ID/ /summarypublic Guid Templateld ( get; set; / summary/模版名称/ /summarypublic string Name ( get; set; / /模版内容/ public string Content ( get; set; / /是否为部分视图/ public bool IsPartial ( get; set; 初步设计就是如此,增加了一个IsPartial属性,因为我们的模版或许会作为部分视图在其他模版里调用, 就像 UserCon

5、trol 一样。那么Page类的设计就略显复杂了。我们想访问一个Page起码要有访问路径吧,所以就要有一个UrlPat tern属性,也就是访问规则,因为像详细页一般只是参数的变化,所以URL不能写死,只能是一个规则。既然有规则,也会有一些参数,而且参数不一定是?name=value形式,可能是/value/valuel形式,所 以我们还得设计一个UrlPattern类。田日代码/ summary/ Url访问规则/ /summarypublic class UrlPattern (/ summary/具体规则/ /summarypublic string Pattern ( get; set

6、; / summary/正则引擎/ public Regex Regex ( get; set; / /参数列表/ public string Parameters ( get; set; / /获取某个参数的值/ / param name=rawurl当前访问的 URL/ param name=name参数名/param/ public string GetValue(string rawurl, string name) (throw new System.NotImplementedException();是的,你没看错,我们要用正则表达式,这可能是对制作人员难度最大的部分。:)不过可以

7、教他们初级 的写法,可以应付绝大多数需求。比如我写一个规则如下/details/(?d+),这个表明参数名为articleid,访问规则就是、/d etails/ 数字Page除了访问URL外还要有缓存的概念,不然我们如何提升性能,你说是不?!缓存可能还会用标 签里去,因为如果Page不缓存只是缓存了某个标签,所以Label也要有缓存,那么我们是否需要设计一 个缓存类呢? 国日代码/ summary/ Page/Template/Label 的缓存/ /summarypublic class Cache(/ summary/缓存名/ public string Key ( get; set;

8、/ summary/缓存秒数/ public int CacheSeconds ( get; set; / /获取缓存数据/ /summary/returnsx/returnspublic object GetData()throw new System.NotImplementedException();/ summary/移除缓存/ /summarypublic void Remove()(throw new System.NotImplementedException();/ summary/更新缓存/ /summary/ public void SetData(object data)

9、(throw new System.NotImplementedException();那么Page类还应该有什么? Labels!是的,我们不可能每次都去解释模版来获取所有的Label,而是P age被缓存后我们只需要访问他的LabelCollection即可。那么我们来看下Page的设计雏形吧。日代码/ summary/ Page 类/ public class Page/ / ID/ /summarypublic Guid Pageld ( get; set; / summary/名称/ /summarypublic string Name ( get; set; / summary/标

10、题/ public string Title ( get; set; / /关键字/ public string Keywords ( get; set; / summary/描述/ public string Description ( get; set; / /模版/ public Template Template ( get; set; / /访问路径规则/ public UrlPattern UrlPattern ( get; set; / / /summarypublic Label Labels ( get; set; / summary/缓存/ /summarypublic C

11、ache Cache ( get; set; / summary/显示HTML代码/ /summarypublic void Render()(throw new System.NotImplementedException();不错哦,袄哟,不错哦。其实对于大型的站点,子站的概念是不可缺少的。或者我们的CMS需要支持多站点,那么还需要一个Site类。日代码/ summary/站点/ public class Site(/ /站点ID/ public Guid Siteld ( get; set; / summary站点名称/ /summarypublic string Name ( get; set; / summary/站点备注/ /summarypublic string Note ( get; set; / summary/站点域名/ public string Domains ( get; set; / /站点状态/ public Status Status ( get; set; / /站点的页面/ public Page Pages ( get; set; 一.好啦,初步的设计就到这了,下节我们讲怎么让这些类运作起来。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号