Orchard基本概念
本文链接:http://www.cnblogs.com/souther/p/4531273.html
Orchard是个CMS(这不是废话么),它的首要目标是帮助你从现有的碎片建设网站。这些碎片大小不一、形状迥异,如果你想高效地利用它们,那你首先得很好的理解它们。本文将对深入解释这些碎片的名称与功能。
常规CMS定义
内容(content)
CMS中的C就是指的内容,这也就是说CMS管理的任何东西都是内容。更准确地说,拥有任何信息的站点中的每一个东西都是内容。例如,一篇博客,一个评论,一个产品甚至导航菜单或者可识别的公司Logo,各处的内容。所以正确的想法是内容是站点的所有一切。现在你可能越来越糊涂了。接下的章节我们将搞清楚不同各类内容之间明显的区别。
管理界面、控制台或后台
管理界面(有时也叫控制台(dashboard,有人叫仪表盘,随便吧,大家知道是什么东西就行)或后台),这东西大家都知道用来管理网站和网站内容的地方。这里只有授权“Access admin panel”用户可以访问。这就是CMS中的M。
CMS
CMS中的S指的是“system”,即系统,它其实不像它看上去那样肤浅无用。其实它很重要,CMS管理内容必须以系统的方法:这也就是说所有内容都是资源的交互与统一管理。
例如,你可以使用常规工具管理博客文章,页面以及产品,而这些东西使用常用模块就都可以评论、评级或标记。这会让你感觉体验一致且便于创建新的内容类型。
前端(Front-end)(译者:其实与它的反义词back-end来说翻译成前台也可以,因为把back-end翻译成后端感觉怪怪的,我们一般都说后台吧)
前端是定期匿名用户访问的网站部分。换句话说,就是网站除了管理界面之外呈现给公众的所有东西。
(译者:上句话其实说不说没有什么意义,来到此的人都知道前端的概念,越说越不懂。)
安装(Setup)
安装环节是必不可少的,否则你连站点也看不见更不用说其它的了(比如安装完就可以创建内容了)。
Orchard概念(前边的部分都是为讲概念的,下边才真正进入主题)
内容条目
一个内容条目就是一条简单的内容,一般与一个链接相关联。像页面、博客文章或产品都是内容条目。
内容类型
内容条目是内容类型的实例。换句话说,内容类型是内容条目的类。上边曾说过的页面,博客文章,产品,其实它们被描述成三个内容类型:page、blog post和product。也就是说我们访问一篇博客其实就是类型blog post的一个条目。(译者:其实这段看英文可能比中文更好理解,其实他要说明的意思就是内容类型与条目的关系,类似于我们面向对象中,类与类的实例之间的关系 一样。)
内容部件
在Orchard中,内容类型由更小的部分组成,通常叫做内容部件。内容部件是内容的原子单位,用这些部件足以实现一个特定的功能并且内容类型也可以交互重用它们。
例如,评论、标记和评级都是内容部件,因为它们的特定功能,所以可以被内容类型所重用。博客的评论往往不需要给定内容类型。评论在博客中的使用和在页面与产品中基本一样。
在实际作用中,给定的内容类型也只能出现一次(大概是说一内容类型的实例化在一个页面中只能有一个吧)。
内容字段
内容字段是可以被添加到内容类型中的多类信息(大家把它理解成类中的字段即可)。内容字段有名称、类型以及具体属于一个内容类型。任意给定的内容类型都有可能有几个字段类型。(不懂意思?看下边的例如)
例如,一个产品内容类型有一个文本字段表示它的库存,一个数值字段表示价格,另外一个数值字段表示重量。这些字段中的每一个都可能只对一个产品有意义。意思是你有你的库存,我有我的价格,互不影响。
注:这就有可能在我们创建有三个属性的产品部件时,大致等同于创建这些字段的一个集合。这样做可以将任何的内容类型转换成一个产品。对于Orchard来说用哪种方法都可以(好像只说了一种?大致意思是条条道路通罗马,只要可以用,怎么搞都可以)。
模块(Module)
Orchard可以创建各种用户扩展,它们其实都是以模块的方式存在。对于Orchard来说一个模块就是一系列扩展,在网站目录下我们可以看到一个模块目录子文件夹,模块在这里被分组存放。
在Orchard的资源库中可以看到许多可选的模块(在英文文档的菜单上有个Gallery,就是这里,可以进去看看)。
特性(Feature)
一个模块可以有一个也可以有多个特性,特性其实就是一组功能的逻辑组合,可以单独开启或关闭。例如,一个用户授权模块可以有如下特性:OpenID,FackBook,LiveID, Twitter or Google授权等,它们都可以被打开或关掉。
特性也可以依赖其它特性,无论它们是不是在一个模块中。
描述清单(Manifest)
清单是一个文本文件,主要用于给系统描述一个模块或一个主题。下面是个例子:
|
用户界面组合(UI composition)
Orchard中的内容都是由一些部件组合成的。当我们考虑内容的组合时这就需要一个机制来编排显示。这也是我们讨论用户界面组合的原因,像基础位及内容都需要组合成一个有机的整体。有几个概念都是关于用户界面组合的,下边的这几个。
翻译到此处时吐血,休息一会再往下吧。
主题
在我们设计网站的时候,能够可视化的修改网站的各个方面是很重要的。Orchard中内容管理与内容的可视化渲染有明显的区别。
主题是为网站包装好的皮肤。它由样式表、图片、布局、模板甚至自定义的代码等组成。甚至也可以从一个主题继承自另一个主题,如果你想对现存的主题做一个小修改的话,这样是非常有意义的。
布局
布局是主题中的一个文件,布局定义了网站页面的一般结构。布局所定义的一系列区域中都可以插入内容或部件。
模板
网站中的数据需要转换到form中对于用户来说才是可读的,而且每块内容部分、每个字段及每个部件都需要在前台可视化的展示。(呵呵,不然怎么看,总不能看数据表啊)。一套模板其实就是格式化数据与转换数据为浏览器可显示的HMTL的一套方案(配方?大致这个意思)。你可以理解成模板就是给数据预定义好角色的清晰的HTML框架(说了半天还是模板 的意思)。
这有一个例子是一个显示路由部分标题的模板:
|
形状
在用模板显示东西(页面元素)之前,这些东西都得转换成一个形状,这个形状是一个非常易于延伸的对象,它包含显示所需要的各种信息。在我们通过模板渲染之前,每个东西都得映射成形状树,而这些形状树就是最终页面内容的有序抽象。这样一些形状树的好处是任何模块都能修改已有形状或创建新的形状。
布局、区域、部件和内容部分都能表示成渲染过程中的一部分形状。
又看不懂吧,看例如吧
例如,有人可能想搞个头像模块来添加头像图标形状到评论形状,而这些评论形状是通过评论模块创建的。同样的方法,部件模块的层可以添加部件形状到布局形状的区域形状。
还是不懂?实际用用再来理解吧
定位、放置
当我们渲染组成页面或内容条目的部件与字段的集合或其它形状时,Orchard需要知道按什么样的顺序来处理。Placement.info是一些XML文件,这些文件描述了什么形状该显示、显示到什么区域中、什么顺序等规则。这就使得我们能够自定义化渲染每个形状,也能调整它们的渲染顺序。
区域
区域是布局中比较特别的部分,可以通过插入部件的方式来定制。在有的主题中,区域是可折叠的,这就意味着它们可以隐藏掉如果它们被包含在未激活的部件中时。
部件
一个部件是用户界面中的一小部分,它能够被添加到网站的部分或所有页面中。部件的常见例子有标签云,地图,归档,搜索表单,或最近的博客等。
层
一个层是一组被特定规则激活的部件(包括它们的配置,包括它们定位区域名和顺序)。
例如,主页层被特定选择了主页的规则激活。默认层总是激活的不管显示的是哪个页面。授权层仅仅是在用户确认是它们自己时激活。
当一个页面上激活的层超过一个时,所有层的所有部件会同时显示。Orchard序列化了它们基于它们的位置字符串。
安全
用户和角色
在Orchard中,用户可以分配角色,也就是用户的能干啥。权限可以分配给角色用来定义网站中谁能干什么(更多细节请参照下一节)。任何一个用户都可以有一个或多个角色。
这段其实就是说用户与角色的,搞开发估计都知道它的作用。
网站的管理者也能创建他们自己的角色,但是Orchard提及的内置角色应该满足大多数的网站需求:
- 管理员:对网站设置与内容有完整的控制权。
- 编辑:不创建内容但是可以编辑和发布被作者创建的内容。
- 版主:验证用户创建的内容,比如评论。
- 作者:撰写或发布他自己的内容。
- 投稿人:可写内容但不一定有权限发布。
- 匿名用户:未知用户,凡是没登录的都算。
- 授权用户:登录了的都是。(也就是能登录那肯定是有账户的)
匿名或者授权都不能手动分配给一个用户,而是在运行时动态决定的。
特权与权限
在Orchard中所有的用户都没有相同的权利与特权:管理员能选择谁能创建内容,谁能写或者验证评论等等。权利和特权表示的就是权限。在Orchard中,权限被授予角色但不是明确拒绝的。换句话说,假如一个用户属于某一类角色有什么样的权限,他就有什么权限。要想删除一个权限,要么删除拥有此权限角色的用户,要么删掉整个角色的权限。
有些权限是“隐含授予(effectively其实是有效或实际,但是从上下文中我觉得隐含授予更妥当)”。这就是说,权限没有被明确的授予,但是被另一个授权隐含。例如,如果你授予网站管理员权,那就意味着你隐含授予了其它所有权限。(也就是说给了一个人管理员,那么其它的权限就都有了,老外有时说话就是磨机,一个意思说来说去,就是害怕你不懂)。
模块定义权限,也就给内置角色默认设置。就是说如果你建了自己的模块,你就可以给它指定特殊权限。
网站管理员
网站管理员有时也叫超级管理员,这货一般在安装的时候就定义好了而且有所有权限。如果你有权限也可以对管理员的设置进行修改。
有个叫“管理员权限”的权限,这个权限默认授予管理角色中的成员。我们建议不要轻易给别人管理员权限。
开发
这一节我们主要说说模块开发者需要知道的概念。
ASP.NET MVC
Orchard用的是ASP.NET MVC 框架,这谁不知道呀。
Handler
可以叫处理程序,它类似于MVC中的过滤器,它可包含代码执行请求生命周期的特定事件。它们往往用来安装数据库或者在其它东西导入时做些额外的操作。(呵呵,感觉它解释的我都不知道这货是干什么的了,这东西大家都用过也知道是干啥的,不用非要用它的解释)
Driver
Drivers类似于MVC的控制器,但Drivers工作在内容部分的层次而不是所有请求的层次。它们往往从管理编辑器来为渲染和执行后台程序准备形状。其实说了半天就是控制器的作用。只不过更小了。
Record
一个记录是一个类,它模型化了内容部分的数据库表示。就是说给内容部分建立了一个模型类,它们是POCO(简单传统CLR对象),这里边的属性必须是虚拟的。
Model
模型其实就是内容部分的类。在强类型类的表单中或者 更复杂的动态形状中,有些部分定义了视图模型。
Migration
迁移就是当首次安装一个特性或升级它时执行的操作。迁移可以平滑的升级个性特性而不丢失数据。Orchard有一个数据迁移框架。
Injection
控制反转,或者注入,Orchard中用的都比较多。当其它代码需要一个依赖时,它往往就需要注入或者几个特定接口的实例。这个框架在运行时将负责选择,实例化和注入的正确实现。
译者:翻完这篇后感觉说明文档中有些话其实有点多余,但是又不好理解,所以大家在看的时候,知道这个东西意思就行,不用咬文嚼字,非要搞懂每一句意思,而且有的感觉中文的话没有英文的好理解,所以最好中英文对照的看。
Orchard基本概念的更多相关文章
- [翻译]Orchard如何工作
Orchard一直是博主心中神一般的存在,由于水平比较菜,Orchard代码又比较复杂看了几次都不了了之了.这次下定决心要搞懂其工作原理,争取可以在自己的项目中有所应用.为了入门先到官网去学习一下相关 ...
- 微软CMS项目 Orchard 所用到的开源项目
研发了Orchard一年左右了,时常遇到瓶颈,总觉得力不从心,其实并不是基础不够,关键还是概念性的东西太多,一会儿这个概念名词,一会那个,关于Orchard的技术文档也的确很少,每次看起来总是焦头烂额 ...
- Orchard 微软CMS项目介绍
我之前的项目中使用了Orchard, 它依据依赖注入的思想而做的模块化让我深深为之着迷,这里开始宣传一下这个架构. 包含的概念非常之多,我现在也不甚了解.Orchard就是自己想控制它改变它的话需要非 ...
- Orchard入门:如何创建一个完整Module
这是一个Orchard-Modules的入门教程.在这个教程里,我们将开发两个功能页面分别用于数据录入与数据展示. 完成上述简单功能开发,我们一共需要6个步骤.分别为: 创建Module 创建Mode ...
- Orchard源码分析(4.4):Orchard.Caching.CacheModule类
概述 CacheModule也是一个Autofac模块. 一.CacheModule类 CacheModule将DefaultCacheManager注册为ICacheManager: ...
- Orchard源码分析(6):Shell相关
概述在Orchard中,提出子站点(Tenant)的概念,目的是为了增加站点密度,即一个应用程序域可以有多个子站点. Shell是子站点(Tenant)级的单例,换句话说Shell代表了子站点.对比来 ...
- Orchard源码分析(5.2):BeginRequest事件处理(DefaultOrchardHost.BeginRequest方法)
BeginRequest事件处理的作用是确保所有Shell已经加载,或者在扩展有变化的时候重新加载. void IOrchardHost .BeginRequest() { ...
- Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)
概述 采用Event Bus模式(事件总线),可以使观察者模式中的观察者和被观察者实现解耦. 在.Net 中使用观察者模式,可以使用事件(委托)和接口(类).Orchard Event Bus使用的 ...
- Orchard源码分析(1):Orchard架构
本文主要参考官方文档"How Orchard works"以及Orchardch上的翻译. 源码分析应该做到庖丁解牛,而不是以管窥豹或瞎子摸象.所以先对Orchard架构有 ...
随机推荐
- 【php】使用phpdbg来调试php程序
PHPDBG是一个PHP的SAPI模块,可以在不用修改代码和不影响性能的情况下控制PHP的运行环境 可以在PHP5.4和之上版本中使用.在PHP5.6和之上版本将内部集成 功能 单步调试 灵活的下断点 ...
- 深入PHP内核之ZVAL
一.PHP的变量类型 PHP的变量类型有8种: 标准类型:布尔boolen,整型integer,浮点float,字符string 复杂类型:数组array,对象object 特殊类型:资源resour ...
- 避免jQuery名字冲突--noConflict()方法
众所周知,在jQuery语法中,$符号是jQuery的简写方式.但在某些情况下,可能需要在同一个页面引入其他javascript库(比如Prototype).因为$简短方便,很多的库也是使用$符号.为 ...
- poj 1050 To the Max(最大子矩阵之和,基础DP题)
To the Max Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 38573Accepted: 20350 Descriptio ...
- Begin to record my bologs....
after work for almost two years, I have realize the truth notes can help a lot for us. avoiding my l ...
- [转]Ionic最佳实践-使用模态窗口modal
本文转自:http://m.blog.csdn.net/blog/betreex/45649689 原文地址:Ionic最佳实践-使用模态窗口modal 模态窗口的结构 在Ionic中,模态窗口通过$ ...
- SQLConnect_ref.cpp
// SQLConnect_ref.cpp // compile with: odbc32.lib #include <windows.h> #include <sqlext.h&g ...
- HDU 1576 A/B【扩展欧几里德】
设A/B=x,则A=Bx n=A%9973=A-9973*y=Bx-9973*y 用扩展欧几里德求解 #include<stdio.h> #include<string.h> ...
- 第22章 DLL注入和API拦截(1)
22.1 注入的一个例子(跨进程子类化窗口) ①子类化窗口可以改变窗口的行为,让发往该窗口的消息重新发到我们指定的过程来处理.但这种行为只能在本进程中(如A),对于从一个进程(如B)去子类化另一个进程 ...
- Eclipse 分屏显示同一个文件
场景 : 某个类很大,可能有数千行.当你想要将类开头部分与中间或者靠后的部分进行对比时,请follow如下步骤: Window -> Editor -> Toggle Split Edit ...