程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> BlogEngine.Net架構與源代碼分析系列part11:開發擴展(下)

BlogEngine.Net架構與源代碼分析系列part11:開發擴展(下)

編輯:關於ASP.NET

自定義Theme

個性化的主題是一個完善的Blog系統中所必備的,同時也是一個亮點。在這篇文章裡我將給大家展示一下BlogEngine.Net的第三個開發特性,那就是自定義的Theme。本文的重點放在BlogEngine.Net的開發規范和實現原理上。如果您對BlogEngine.Net的架構很了解的話,那麼開發一個自己的Theme是一件很簡單的事情,如果您不是很了解,那麼你也可以按照本文講述的規范開發出一個自定義的Theme來。

BlogEngine.Net中的Theme

在BlogEngine.Net的源代碼中默認存儲了三個Theme(Standard默認,Mobile移動版,Indigo),更多的Theme您可以到它的官方站點下載。同樣這些Theme支持熱插拔,我們只要把下載的Theme放在themes目錄下就可以實現它的安裝。相信這種Theme會給用戶帶來更多的使用上的感受。由於BlogEngine.Net開放源代碼,所以對於Theme的開發也完全由用戶自己控制。如果大家想知道這個Theme到底有多厲害,看看BlogEngine.Net的官方站點就知道了,估計那就是使用BlogEngine.Net,然後換了一個Theme做的。

規范與原理

對於用戶來說到底使用哪個Theme是存儲在BlogSetting中的,在設置頁面中我們可以看到一個下拉列表來選擇主題,這個下拉列表的數據是通過讀取themes目錄下的子文件夾名稱獲得的,這就要求我們在開發Theme時要以Theme的名稱作為這個文件夾的名稱。需要注意的一個問題就是在BlogEngine.Net的Web站點的根目錄下的所有.aspx的Codebehind都是繼承自BlogBasePage,這個類又繼承自Page類,也就是說BlogBasePage將一些頁面中共有的操作進行了統一的處理,對於這個類我會在接下來的一篇文章中進行分析。

在BlogBasePage中有這麼一段代碼:

private string _Theme = BlogSettings.Instance.Theme;
/// <summary>
/// Assignes the selected theme to the pages.
/// </summary>
protected override void OnPreInit(EventArgs e)
{
if (Request.QueryString["theme"] != null)
_Theme = Request.QueryString["theme"];
MasterPageFile = Utils.RelativeWebRoot + "themes/" + _Theme + "/site.master";
base.OnPreInit(e);
//....
}

這段代碼就是在頁面預初始化時(注意一定要放在這個處理器中)將Page的MasterPageFiles設置為BlogSetting中所設置主題名稱的目錄中的site.master,這就要求我們在開發自己的Theme時需要創建頁面的主文件site.master。

此外就是在研究了PostViewBase和CommentViewBase(這兩個類也會在下一篇文章中做詳細的說明)的實現以後對於Post和Comment的顯示也是到BlogSetting中所設置主題名稱的目錄中去查找PostView.ascx(直接繼承自PostViewBase)和CommentView.ascx(直接繼承自CommentViewBase),這就需要我們在開發自己的Theme中需要創建文章的顯示界面PostView.ascx和評論的顯示界面CommentView.ascx。

以上幾個文件是開發BlogEngine.Net的Theme所必須的,實際上也就形成了一個完整的前台頁面了。當然你也可以定義自己的布局,css,圖片等。這些文件到底應該如何定義,以Standard為例,先讓我們看一下它的實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved