1 Orchard 入门篇-Orchard 基本概念

引言:最近学习Orchard,被它的各种机制彻底迷上了,有点相见恨晚的感觉,学习起来完全停不下来,工作10多年没写过1篇博客的我都忍不住开通博客,记录下自己使用Orchard做项目的点点滴滴。本系列连载将记录我在使用Orchard1.9.2制作一个真实项目的全过程,会更侧重予实践,Orchard的原理可以查看官方资料。

第一部分 入门篇

1.1 Orchard简介

Orchard是有微软公司创建的,基于ASP.NET MVC技术的免费内容管理系统。

具有以下特点:

  • 可用于建设博客、新闻门户、企业门户、行业门户等各种网站
  • 简单易用的后台管理界面
  • 性能稳定,功能齐全。
  • 热拔插模块化架构提供超强扩展性
  • BSD协议授权,可用于商业闭源项目

1.2 Orchard基本概念

CMS是内容管理系统的缩写, ‘C’指的是内容, 内容是网站中的任何信息,例如一篇blog、一个回复,甚至一个导航菜单、公司logo等。如果有权限,我们可以在系统后台进行网站和内容的管理,这就是’M'。而 ‘S’ 是系统,这是个比较模糊的概念。

orchard并没有提供太多的现成业务功能,所以你在其它CMS轻易的找到诸如广告酷炫插件,但是发现在orchard中很难找到, 

Orchard是由微软于2010始启动,使用最新.NET技术栈实现的免费开源内容管理系统。项目开发人员多数来自ASP.NET团队,是继Petshop,Oxite之后的重磅开源项目!

它整合了上百个开源项目,如autofac,nhibernate等,它拥有非常复杂的模块机制,可以动态编译模块,因此只需将代码发布即可运行。

同时在CMS系统架构上,它抽象了内容类型(ContentTypes),Orchard认为一切内容皆由ContentPart与ContentField构成,你可以自由的设计内容类型,这是它相比其它CMS强大的原因之一!

在拥有了极灵活的内容管理机制后,Orchard也拥有极复杂的渲染机制,首先它采用了类似Photoshop作图方法的图层思想,任何Url都对应一条Content或者Projection,同时也将满足Layer层级规则的层“叠加“,最终输出的视图模型(ViewModel)将是一个多层结构的,且每层都拥有多个Zone的数据结构。

ps:看起来就像一本书,一页纸就是一个Layer,每页纸上有N个Zone,所有纸的Zone都是固定的,在theme.txt里面定义好的,每个Zone里面拥有N个Widget。

 

1.2.1 ContentType

ContentType:内容类型。Orchard 通过定义内容类型来定义网页上一些可重用的界面元素。例如可以定义一个叫 BannerWidget的内容类型来显示前台首页的滚动广告,也可以定义一个叫CrawlerArticle的类型来专门存放和展示通过网络爬虫采集来的文稿内容。内容类型定义内容包含的属性,以及属性值的类型。内容类型还可以任意组合变成一个新的类型。可以将内容类型理解为用户自定义可重用控件。

内容类型由一个或多个ContentPart组成(内容部件)。便于更好的理解下面列出来Orchard部分自带的内容类型并加以说明。

MenuWidget:前台导航部件,用于在前台首页显示导航栏。可以通过在模版(模版编辑在后面的章节中会讲解)中重写Menu.cshtml来定义该内容类型显示的样式。下图就是通过重写了Menu.cshtml模版页面来重新定义导航栏显示的样式。

MenuWidget在Orchard中被定义成了Widget(挂件),它是Orchard的一种特殊的内容类型,通常用于展示固定在每个页面,或者特定页面的固定位置的内容类型。MenuWidget又由Common、Identity、Widget等ContentPart组成。

Orchard还包含ContentMenuItem、BlogPost、BlogArchives、Blog等内容类型将在后面讲解。

1.2.2 ContentItem

ContentItem:内容项,内容类型的实例。内容项指一个单独的内容,如文稿、Blog、页面等。内容类型是类,内容向是内容的实例。

1.2.3 ContentPart

ContentPart:内容部件。内容部件是内容类型的小一级的内容类型,一个内容类型可以由一个或者多个ContentPart组成。Orchard每个ContentType都对应一个与它同名的ContentPart。

BodyPart、TitlePart、CommonPart等都是Orchard预先定义的ContentPart。

1.2.4 ContentFiled

ContentFiled:内容字段。即内容的具体属性。内容字段指定了内容某个属性的类型和值。主要用于扩展字段。ContentPart由一个或者多个ContentFiled组成。

Orchard预先定义的ContentFiled有

TextField:提供字符类型的字段

NumericField:提供数值类型的字段

EnumerationField:提供枚举型字段

BooleanField:提供Boolean字段

MediaLibraryPickerField: 提供图片、视频、文件等路径信息的存储,通过使用该字段,在编辑该字段值时候,还提供了从资源库中选择媒体资源的功能。

1.2.5 Module

Orchard通过Module来进行功能扩展,可以根据自己的需求来自定义Module,也可以从Orchard的Module的展示厅里面下载安装Module扩展功能。Orchard本身也是由一个个Module组成的。如下表:

Orchard.Users:提供用户管理

Orchard.Themes:提供主题的管理

Orchard.Taxonomies:提供多租户管理(即多站点管理)

Orchard.MediaLibrary:提供文件管理上传下载管理,如图片文件,Word文件的。

Orchard.Comments:提供评论管理。

1.2.8 Theme

Orchard 提供主题管理,即可以为前台页面提供界面主题。

1.2.9 Layout

Layout布局,类似MVC的视图。一条Url就是一个布局。

1.2.10 Zone

Orchard将每个Layout都分为了Header, Navigation, Featured, BeforeMain, AsideFirst, Messages, BeforeContent, Content, AfterContent, AsideSecond, AfterMain, TripelFirst, TripelSecond, TripelThird, FooterQuadFirst, FooterQuadSecond, FooterQuadThird, FooterQuadFourth, Footer等区域。如下图:

 

 

用户可以根据自身需求定义使用的区域。

1.2.11 Widget

Widget即页面挂件,通常指固定显示在某个位置的内容部件。

 

1.2 Orchard工作流程

当有一个request请求需要显示一个内容的时候。系统首先是根据Route规则找到该请求对应的Controller中对应的action。然后在此action中通过IContentManager接口取获取内容。在用IContentManager获取内容的时候,Orchard框架会自动通过相关内容部件处理器所提供的数据存储Filter来获取相关部件的数据。接下来通过BuildDisplay构建一个需要显示到视图上的动态类Model,组成内容的各个部件都作为这个动态类的属性。最后Orchard视图引擎根据各部件驱动器所提供的显示方法,找到对应的显示模板,最终组合成一个UI呈现给用户。呈现编辑页面和提交编辑数据的原理大致相同。内容部件工作示意图如下:

图片择至:http://www.cnblogs.com/esshs/archive/2011/06/13/2079937.html

 

转载于:https://www.cnblogs.com/Manny2016/p/5394005.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值