引言:最近学习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

1 Orchard 入门篇-Orchard 基本概念相关推荐

  1. JavaScript从入门到精通之入门篇(一)概念与语法

    入门篇大纲 第一部分 概念与语法 1.JavaScript的历史 2.基本概念 3.JavaScript的使用.调试和异常处理 4.基本词法和变量 5.数据类型和类型转换 6.运算符 算数运算符 赋值 ...

  2. Elasticsearch入门篇(一、基本概念)

    注意:所有es入门篇博客都是根据es官网6.2版本的文档翻译而来 有一些概念是Elasticsearch的核心.从一开始就理解这些概念将极大地帮助简化学习过程. 近实时(NRT) Elasticsea ...

  3. 女友问粉丝过万如何庆祝,我发万字长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学妹|学弟|小白看了就懂

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 粉丝破万了 新星计划申 ...

  4. Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...

  5. Symbian开发系列 - 入门篇

    要开始我的Symbian开发之旅了, 先收集一些相关资料,如Symbian概述, 开发平台搭建, 参考书籍与网络资源. [基础] 什么是Symbian 学习Symbian的基本概念  Symbian操 ...

  6. Python从入门到精通 - 入门篇 (下)

    上一讲回顾:Python从入门到精通 - 入门篇 (上) 接着上篇继续后面两个章节,函数和解析式. 4 函数 Python 里函数太重要了 (说的好像在别的语言中函数不重要似的).函数的通用好处就不用 ...

  7. AI视觉组培训第二弹——入门篇

    ▌入门篇   由恩智浦赞助的AI视觉组,今年把人工智能应用在智能车竞赛中的难度由提高了一步.这里面最重要的部分就是,用人工智能的神经网络进行图片识别.   上一次培训,我们已经介绍了人工智能和神经网络 ...

  8. Android10.0 Binder通信原理(二)-Binder入门篇

    摘要:本节主要来讲解Android10.0 Binder的设计原理,如何设计一个Binder通信 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分 ...

  9. python语言自学教程-3D图示Python标准自学教程入门篇

    内容简介: Python入门篇教程从最基础的计算机发展史.Python的来源与发展历史开始讲起: 依次讲解python变量与表达式.数据类型.运算符.流程控制语句等,末尾通过课堂练习.课后作业以及微型 ...

最新文章

  1. 【Linux】一步一步学Linux——sudo命令(105)
  2. viewmodel+livedata+binding 实现listview+adapter
  3. CSS图像绘制之:条纹背景(转)
  4. Linux学习总结(39)——系统管理员应该知道的 20 条 Linux 命令
  5. HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】
  6. mybatis调用mysql存储过程_秒会mybatis调用存储过程(MySQL)
  7. Leetcode 233.数字1的个数
  8. 力扣-1143 最长公共子序列/1035 不相交的线
  9. 两个PDF合并成一个PDF怎么做?三分钟教会你两种方法
  10. 如何获取Android手机连接当前网络的外网IP
  11. 蓉叶云库——简单介绍seo技术
  12. CGAL::2D Arrangements
  13. AtCoder Beginner Contest 248 E - K-colinear Line「计算几何判三点共线」
  14. 怎么把视频变成GIF
  15. Grafana监控群晖NAS
  16. Python抓取excel中关键字
  17. vue-seamless-scroll组件踩坑指南
  18. (FZU-2285-迷宫寻宝)BFS最短路径问题
  19. Python基础教程,Python入门教程
  20. 什么是SOA架构?为什么使用SOA架构?

热门文章

  1. 分享:Android程序员,必备精品网站大汇总
  2. 【转】Docker —— 从入门到实践
  3. Perl中use、require的用法和区别
  4. 物联网、云计算商用或从“家庭自动化”得以突破
  5. 【20120516】【中午】
  6. [待解决]报错的脚本
  7. acquisition calculation
  8. how you can go to attend eap freely?
  9. iPad导入Mac:非常快!一气呵成,直接去photo里面选择,之后左上角倒出就好,颠覆之前windows上面的认知!
  10. C++模板声明与实现分开--由此想到的编译,链接原理