Orchard基础知识
Orchard 是一个 Web CMS系统,他的目标是使用一些预定义的部件来搭建网站。能需要深入的理解这些部件,以便更好的使用他们。这篇文章主要就是来探讨这些部件,讲解他们的设计思想及其提供的能力。
CMS中的'C'意思是"content"(内容),你可以说,CMS管理的任何东西,都是内容。更准确的说,content就是站点上包含信息的任何东西。比如,一个blog 帖子,一条评论,一个产品,甚至是导航菜单、工资logo,都是内容。如果你意识到了这一点,你将能更好的使用CMS系统。在后面的章节中,我们会详解讲解各种内容的不同。
Admin panel, Dashboard or back-end
管理员界面(有时又被称为Dashboard或者back-end(后台)) ,是你管理站点,发布内容的地方。它受到权限控制,只有具有"Access admin panel"权限的人才可以访问。这就是CMS中的'M' 。
CMS中的 'S' 是指的"System"(系统),他意味着CMS系统采用统一的方式来管理内容:内容采用同样的方式管理,维护资源的关系。
比如,你使用通用工具来管理博客帖子、页面和产品,通过通用模块,为他们提供了评论、投票、标签等功能。这样,为用户提供了一致的使用体验
front-end是注册或者匿名用户都可以访问的页面,简单的说,就是站点的公共页面
Setup 是站点运行必须要经过的过程
Content item是一块独立的内容,常常和一个独立的URL地址关联。比如页面、博客、产品都是Content item
Content type
Content items 是 content types 的实例,换种说法,及 content types 是 content items 的类。在上面,我没说页面、博客、产品都是Content item。他们分别对应了三种Content type:页面、博客、产品,比如,博客(Content item)是博客类(Content type)的实体
在Orchard中, content types 是由许多小的部分组成,这些部分,被称为content parts。 Content parts 是content中具有特定行为且能被Content type重用的最小单位
比如,comments, tags 或者 ratings 都是content parts,他们都具有各自特定的行为,且能够被Content type重新。
在一个Content type中,同一content parts只能出现一次。
Content fields 是Content type中录入信息的地方。Content fields可以设置名称和类型。在给定的Content type中,可以按需设置不同的field type
比如,产品 content type具有一个文本框输入Sku,一个数字框输入价格,还有一个数字框输入数量,这些文本框只有在产品Content type中有意义。
注意:你可以创建一个Content parts包含上面的三个字段,然后在产品Content type中加入这个Content parts,效果和上面添加上个Content field是一样的。
能够通过Module为Orchard添加扩展。一个Module就是Orchard的一组扩展,你可以在Orchard的安装目录下面的Modules文件夹中找到它。你还可以通过Orchard Gallery来找到更多的Module。
一个 module包含了一个或者多个features,它是能够被开启或者关闭的一组功能。比如,一个用户自定义验证模块,提供了基于OpenID, FaceBook, LiveID, Twitter 或者 Google 的用户验证,你能够开启这个功能或者关闭他,而不影响其他的功能。
Features 可能会依赖其他的feature,这些feature可能在同一个module中,也可能实在不同的module中
Manifest是一个简单的文本文件,用于描述module或者theme信息
下面是一个简单的Manifest的例子:
Name: Comments
AntiForgery: enabled
Author: The Orchard Team
Website: http://orchardproject.net
Version: 1.8.1
OrchardVersion: 1.8
Description: The comments system implemented by this module can be applied to arbitrary Orchard content types, such as blogs and pages. It includes comment validation and spam protection through the Akismet service.
Features:
Orchard.Comments:
Name: Comments
Description: Standard content item comments.
Dependencies: Settings, Orchard.Tokens
Category: Social
Orchard.Comments.Workflows:
Name: Comments Workflows Activities
Description: Provides workflow activities for comments management.
Category: Workflows
Dependencies: Orchard.Workflows
Orchard 是通过parts来管理content的。 It needs a mechanism that orchestrates the display while taking into account the composite nature of the content. 这就是我们为什么将其称为 UI composition,as elementary bits and pieces of content need to be composed into a harmonious and consistent whole. Several concepts contribute to this UI composition.
当我们设计一个网站,可以修改页面的展示效果是非常重要的。 Orchard实现了内容管理和内容渲染的分离。
Theme是包含Orchard站点显示和触摸的包。里面包含style sheets,images,layouts, templates 甚至custom code。你甚至可以基于已有的主题来开发一套新的主题,这对于你要对现有样式进行小改动的时候,非常的有效。
Layout是theme中的一个文件,他预定义了站点页面的组织形式。一个layout预定义了很多的zones(块),你可以在块中加入内容或者小工具。
每个content part, field 和widget 可能需要转换数据,将信息更好的展现给前台的用户。template 就是一种方式,能够将数据转换为特定的HTML代码。
下面的例子显示了Route part中的模版,用于显示title:
<h1>@Model.Title</h1>
Shape是一个伸缩性很强的对象,它包含页面渲染需要的所有信息。在我们显示内容页面的时候,首先会生产一个排好序的Shape树,然后将页面渲染出来
当渲染页面或者content Item里面的一组parts、fields或者其他的任何shapes,Orchard需要知道他们的渲染顺序。 Placement.info 文件是一个XML文件,描述了块中有那些shapes以及他们的顺序。他能够定义每一个渲染的shape以及渲染的顺序
<Placement>
<Place Parts_Map="Content:10"/>
<Place Parts_Map_Edit="Content:7.5"/>
</Placement>
Zones是layout中的特定部分,可以在其中插入widgets。在一些样式中,块是折叠的,就是说如果里面没有有效的小工具,就不会显示。
widget 是一个可以插入页面的独立UI块。比如tag clouds, maps, archives, a search form, 或者 recent blog posts.
A layer 是一个小工具的集合 ,通过特定的规则,来实现是否启用这一组小工具。
比如, HomePage layer只对主页有效。 Default layer 对所有页都有效。 Authenticated layer只对登陆用户有效
如果有多个Layer同时有效,那么他们所包含的小工具都会显示出来。Orchard 通过小工具的position属性,来判断他们的渲染顺序。
Orchard中, 用户具有一个或者多个角色,同一角色的用户可以看成一类用户。权限是基于角色的,他决定了用户可以在网站上的行为 (后面的章节我们会详细的讲解)。
站点所有者能够自定义角色。Orchard中提供了一些默认的角色,一般来说,已经够用了:
-
Administrator: 具有站点的完全控制权限。
-
Editor: 不能够创建内容,但是能够编辑和发布内容。
-
Moderator: 审核用户产生的内容,比如评论。
-
Author: 创建、发布内容。
-
Contributor: 只能创建,不能发布内容。
-
Anonymous: 匿名用户,没有登陆的用户。
-
Authenticated: 登陆用户
Anonymous 和 Authenticated 不能手动赋给某个用户,他们是在运行时动态赋给用户的。
Orchard中,用户的权限可能不一致:网站的拥有者,可以决定谁可以发布内容、审核内容。权限是基于角色的。就是说,如果一个角色具有某个权限,一个用户属于这个角色,那么他就具有这个权限。撤销权限,你可以将用户移除该角色,或者将权限从该角色上面移除。
一些权限是"effectively granted"。就是说有些权限没有被显示的赋予,但是你也会拥有。比如,如果你拥有站点创建者权限,那么你就拥有了所有的权限。
权限,以及对于角色的默认设置,是通过Module来定义的。 这意味着,你创建自己的Module,实现特定的权限
site owner,有时也被称为 "super user",是一个特殊的用户,在你安装Orchard的时候定义的,他具有所有的权限。你也可以在后台管理页面更改权限。
有一种权限,叫做"Site Owners Permission",默认赋给了Administrator 角色,我们不建议将其赋给其他的角色。
在后面的章节中,我们会详细讲解Orchard开发所需要的知识。
ASP.NET MVC 是Orchard使用的一种框架
Handler是一种简单的MVC filter,他包含代码,能够在请求的生命周期的特定事件上执行。他们常用于一些附加操作(详见面向切面编程)。
Drivers 是一个简单的MVC controllers,但是它是正对content part的,而不是整个请求。
Record是一个类,用于content part和数据库的交互。他们是 POCOs ,每个属性都需要virtual.
Migration是指的第一次安装特性或者升级到特定版本需要进行的操作。他能够平滑的升级某一个特性而不会丢失数据。 Orchard 包含一个数据迁移框架。
依赖注入在Orchard中广泛使用。