1 Orchard 入门篇-Orchard 基本概念
引言:最近學(xué)習Orchard,被它的各種機制徹底迷上了,有點相見恨晚的感覺,學(xué)習起來完全停不下來,工作10多年沒寫過1篇博客的我都忍不住開通博客,記錄下自己使用Orchard做項目的點點滴滴。本系列連載將記錄我在使用Orchard1.9.2制作一個真實項目的全過程,會更側(cè)重予實踐,Orchard的原理可以查看官方資料。
第一部分 入門篇
1.1 Orchard簡介
Orchard是有微軟公司創(chuàng)建的,基于ASP.NET MVC技術(shù)的免費內(nèi)容管理系統(tǒng)。
具有以下特點:
- 可用于建設(shè)博客、新聞門戶、企業(yè)門戶、行業(yè)門戶等各種網(wǎng)站
- 簡單易用的后臺管理界面
- 性能穩(wěn)定,功能齊全。
- 熱拔插模塊化架構(gòu)提供超強擴展性
- BSD協(xié)議授權(quán),可用于商業(yè)閉源項目
1.2 Orchard基本概念
CMS是內(nèi)容管理系統(tǒng)的縮寫, ‘C’指的是內(nèi)容, 內(nèi)容是網(wǎng)站中的任何信息,例如一篇blog、一個回復(fù),甚至一個導(dǎo)航菜單、公司logo等。如果有權(quán)限,我們可以在系統(tǒng)后臺進行網(wǎng)站和內(nèi)容的管理,這就是’M'。而 ‘S’ 是系統(tǒng),這是個比較模糊的概念。
orchard并沒有提供太多的現(xiàn)成業(yè)務(wù)功能,所以你在其它CMS輕易的找到諸如廣告酷炫插件,但是發(fā)現(xiàn)在orchard中很難找到,?
Orchard是由微軟于2010始啟動,使用最新.NET技術(shù)棧實現(xiàn)的免費開源內(nèi)容管理系統(tǒng)。項目開發(fā)人員多數(shù)來自ASP.NET團隊,是繼Petshop,Oxite之后的重磅開源項目!
它整合了上百個開源項目,如autofac,nhibernate等,它擁有非常復(fù)雜的模塊機制,可以動態(tài)編譯模塊,因此只需將代碼發(fā)布即可運行。
同時在CMS系統(tǒng)架構(gòu)上,它抽象了內(nèi)容類型(ContentTypes),Orchard認為一切內(nèi)容皆由ContentPart與ContentField構(gòu)成,你可以自由的設(shè)計內(nèi)容類型,這是它相比其它CMS強大的原因之一!
在擁有了極靈活的內(nèi)容管理機制后,Orchard也擁有極復(fù)雜的渲染機制,首先它采用了類似Photoshop作圖方法的圖層思想,任何Url都對應(yīng)一條Content或者Projection,同時也將滿足Layer層級規(guī)則的層“疊加“,最終輸出的視圖模型(ViewModel)將是一個多層結(jié)構(gòu)的,且每層都擁有多個Zone的數(shù)據(jù)結(jié)構(gòu)。
ps:看起來就像一本書,一頁紙就是一個Layer,每頁紙上有N個Zone,所有紙的Zone都是固定的,在theme.txt里面定義好的,每個Zone里面擁有N個Widget。
?
1.2.1 ContentType
ContentType:內(nèi)容類型。Orchard 通過定義內(nèi)容類型來定義網(wǎng)頁上一些可重用的界面元素。例如可以定義一個叫 BannerWidget的內(nèi)容類型來顯示前臺首頁的滾動廣告,也可以定義一個叫CrawlerArticle的類型來專門存放和展示通過網(wǎng)絡(luò)爬蟲采集來的文稿內(nèi)容。內(nèi)容類型定義內(nèi)容包含的屬性,以及屬性值的類型。內(nèi)容類型還可以任意組合變成一個新的類型??梢詫?nèi)容類型理解為用戶自定義可重用控件。
內(nèi)容類型由一個或多個ContentPart組成(內(nèi)容部件)。便于更好的理解下面列出來Orchard部分自帶的內(nèi)容類型并加以說明。
MenuWidget:前臺導(dǎo)航部件,用于在前臺首頁顯示導(dǎo)航欄??梢酝ㄟ^在模版(模版編輯在后面的章節(jié)中會講解)中重寫Menu.cshtml來定義該內(nèi)容類型顯示的樣式。下圖就是通過重寫了Menu.cshtml模版頁面來重新定義導(dǎo)航欄顯示的樣式。
MenuWidget在Orchard中被定義成了Widget(掛件),它是Orchard的一種特殊的內(nèi)容類型,通常用于展示固定在每個頁面,或者特定頁面的固定位置的內(nèi)容類型。MenuWidget又由Common、Identity、Widget等ContentPart組成。
Orchard還包含ContentMenuItem、BlogPost、BlogArchives、Blog等內(nèi)容類型將在后面講解。
1.2.2 ContentItem
ContentItem:內(nèi)容項,內(nèi)容類型的實例。內(nèi)容項指一個單獨的內(nèi)容,如文稿、Blog、頁面等。內(nèi)容類型是類,內(nèi)容向是內(nèi)容的實例。
1.2.3 ContentPart
ContentPart:內(nèi)容部件。內(nèi)容部件是內(nèi)容類型的小一級的內(nèi)容類型,一個內(nèi)容類型可以由一個或者多個ContentPart組成。Orchard每個ContentType都對應(yīng)一個與它同名的ContentPart。
BodyPart、TitlePart、CommonPart等都是Orchard預(yù)先定義的ContentPart。
1.2.4 ContentFiled
ContentFiled:內(nèi)容字段。即內(nèi)容的具體屬性。內(nèi)容字段指定了內(nèi)容某個屬性的類型和值。主要用于擴展字段。ContentPart由一個或者多個ContentFiled組成。
Orchard預(yù)先定義的ContentFiled有
TextField:提供字符類型的字段
NumericField:提供數(shù)值類型的字段
EnumerationField:提供枚舉型字段
BooleanField:提供Boolean字段
MediaLibraryPickerField: 提供圖片、視頻、文件等路徑信息的存儲,通過使用該字段,在編輯該字段值時候,還提供了從資源庫中選擇媒體資源的功能。
1.2.5 Module
Orchard通過Module來進行功能擴展,可以根據(jù)自己的需求來自定義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等區(qū)域。如下圖:
?
?
用戶可以根據(jù)自身需求定義使用的區(qū)域。
1.2.11 Widget
Widget即頁面掛件,通常指固定顯示在某個位置的內(nèi)容部件。
?
1.2 Orchard工作流程
當有一個request請求需要顯示一個內(nèi)容的時候。系統(tǒng)首先是根據(jù)Route規(guī)則找到該請求對應(yīng)的Controller中對應(yīng)的action。然后在此action中通過IContentManager接口取獲取內(nèi)容。在用IContentManager獲取內(nèi)容的時候,Orchard框架會自動通過相關(guān)內(nèi)容部件處理器所提供的數(shù)據(jù)存儲Filter來獲取相關(guān)部件的數(shù)據(jù)。接下來通過BuildDisplay構(gòu)建一個需要顯示到視圖上的動態(tài)類Model,組成內(nèi)容的各個部件都作為這個動態(tài)類的屬性。最后Orchard視圖引擎根據(jù)各部件驅(qū)動器所提供的顯示方法,找到對應(yīng)的顯示模板,最終組合成一個UI呈現(xiàn)給用戶。呈現(xiàn)編輯頁面和提交編輯數(shù)據(jù)的原理大致相同。內(nèi)容部件工作示意圖如下:
圖片擇至:http://www.cnblogs.com/esshs/archive/2011/06/13/2079937.html
?
轉(zhuǎn)載于:https://www.cnblogs.com/Manny2016/p/5394005.html
總結(jié)
以上是生活随笔為你收集整理的1 Orchard 入门篇-Orchard 基本概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构-线性表之带头结点的双向循环链表
- 下一篇: 回溯算法之全排列问题