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
1 Orchard 入门篇-Orchard 基本概念相关推荐
- JavaScript从入门到精通之入门篇(一)概念与语法
入门篇大纲 第一部分 概念与语法 1.JavaScript的历史 2.基本概念 3.JavaScript的使用.调试和异常处理 4.基本词法和变量 5.数据类型和类型转换 6.运算符 算数运算符 赋值 ...
- Elasticsearch入门篇(一、基本概念)
注意:所有es入门篇博客都是根据es官网6.2版本的文档翻译而来 有一些概念是Elasticsearch的核心.从一开始就理解这些概念将极大地帮助简化学习过程. 近实时(NRT) Elasticsea ...
- 女友问粉丝过万如何庆祝,我发万字长文《保姆级大数据入门篇》感恩粉丝们支持,学姐|学妹|学弟|小白看了就懂
2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 粉丝破万了 新星计划申 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...
- Symbian开发系列 - 入门篇
要开始我的Symbian开发之旅了, 先收集一些相关资料,如Symbian概述, 开发平台搭建, 参考书籍与网络资源. [基础] 什么是Symbian 学习Symbian的基本概念 Symbian操 ...
- Python从入门到精通 - 入门篇 (下)
上一讲回顾:Python从入门到精通 - 入门篇 (上) 接着上篇继续后面两个章节,函数和解析式. 4 函数 Python 里函数太重要了 (说的好像在别的语言中函数不重要似的).函数的通用好处就不用 ...
- AI视觉组培训第二弹——入门篇
▌入门篇 由恩智浦赞助的AI视觉组,今年把人工智能应用在智能车竞赛中的难度由提高了一步.这里面最重要的部分就是,用人工智能的神经网络进行图片识别. 上一次培训,我们已经介绍了人工智能和神经网络 ...
- Android10.0 Binder通信原理(二)-Binder入门篇
摘要:本节主要来讲解Android10.0 Binder的设计原理,如何设计一个Binder通信 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分 ...
- python语言自学教程-3D图示Python标准自学教程入门篇
内容简介: Python入门篇教程从最基础的计算机发展史.Python的来源与发展历史开始讲起: 依次讲解python变量与表达式.数据类型.运算符.流程控制语句等,末尾通过课堂练习.课后作业以及微型 ...
最新文章
- 【Linux】一步一步学Linux——sudo命令(105)
- viewmodel+livedata+binding 实现listview+adapter
- CSS图像绘制之:条纹背景(转)
- Linux学习总结(39)——系统管理员应该知道的 20 条 Linux 命令
- HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】
- mybatis调用mysql存储过程_秒会mybatis调用存储过程(MySQL)
- Leetcode 233.数字1的个数
- 力扣-1143 最长公共子序列/1035 不相交的线
- 两个PDF合并成一个PDF怎么做?三分钟教会你两种方法
- 如何获取Android手机连接当前网络的外网IP
- 蓉叶云库——简单介绍seo技术
- CGAL::2D Arrangements
- AtCoder Beginner Contest 248 E - K-colinear Line「计算几何判三点共线」
- 怎么把视频变成GIF
- Grafana监控群晖NAS
- Python抓取excel中关键字
- vue-seamless-scroll组件踩坑指南
- (FZU-2285-迷宫寻宝)BFS最短路径问题
- Python基础教程,Python入门教程
- 什么是SOA架构?为什么使用SOA架构?
热门文章
- 分享:Android程序员,必备精品网站大汇总
- 【转】Docker —— 从入门到实践
- Perl中use、require的用法和区别
- 物联网、云计算商用或从“家庭自动化”得以突破
- 【20120516】【中午】
- [待解决]报错的脚本
- acquisition calculation
- how you can go to attend eap freely?
- iPad导入Mac:非常快!一气呵成,直接去photo里面选择,之后左上角倒出就好,颠覆之前windows上面的认知!
- C++模板声明与实现分开--由此想到的编译,链接原理