BlogEngine.Net架构与源代码分析系列part11:开发扩展(下)

自定义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为例,先让我们看一下它的实现。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索net
, 开发
, 页面
, themes
, theme
, 一个
名称
,以便于您获取更多的相关知识。

时间: 2024-10-31 23:49:12

BlogEngine.Net架构与源代码分析系列part11:开发扩展(下)的相关文章

BlogEngine.Net架构与源代码分析系列part8:扩展

DataStore分析 本系列的第四篇文章我给大家做了关于BlogEngine.Net全局配置的分析.在这篇文章里我将会对BlogEngine.Net中比较经典的部分DataStore做一个简单的分析,这个DataStore主要完成了BlogEngine.Net三大扩展特性(Extension,Widget,Theme)的数据存储部分,它提供了一个扩展特性统一的存储模型.DataStore是建立在Provider存储(本系列第三篇文章中介绍过)的上层,本文研究的内容会和后面讲到的扩展部分的文章有

BlogEngine.Net架构与源代码分析系列part2:业务对象

共同的父类BusinessBase 上篇文章朋友的评论给了我很大的动力写这个系列的文章,看来大家都比较关注这个系列.为了后续文章做一个铺垫,我在这篇文章的前半部分讲解一下BlogEngine.Net的整体架构,后半部分主要是对于BusinessBase类的分析. 下载源代码以后打开解决方案,我们发现从项目的组织结构上BlogEngine.Net分成两个项目:一个是BlogEngine.Core,顾名思意,它就是BlogEngine.Net的核心逻辑层.所有的业务逻辑和一些功能都在这个项目中体现,

BlogEngine.Net架构与源代码分析系列part1:开篇介绍

最近我要开始这个系列了,这是我的第一个系列.关于BlogEngine.Net我想说的是,它设计的真的很棒,代码简洁但是功能很多,真是麻雀虽小,五脏俱全啊,而且具有了很多Web2.0的特征,甚至它的每一行代码都值得我们去研究一下,它的开发团队很棒.实际上很多国外的个人Blog都是采用BlogEngine.Net加上自定义皮肤实现的,如果您是一个Blog的开发者,这更是您的必备参考! 很多兄弟都推荐BlogEngine.Net看一看,甚至www.asp.net也把它放在了很重要的位置.前一阶段我仔细

BlogEngine.Net架构与源代码分析系列part9:开发扩展(上)

Extension与管理上的实现 从这篇文章开始的连续三篇文章我将向大家展示BlogEngine.Net中的三大开发扩展特性,它们分别是Extension,Widget和Theme.程序员可以在符合一定标准条件下开发自己的扩展,然后将扩展像插件一样(Plug'n play)与BlogEngine.Net进行集成,来达到个性化的应用.本文将详细介绍第一种扩展Extension的开发标准,管理部分介绍等. 声明一下 上一篇文章的回复中有人提到希望我写一下自己的看法和BlogEngine.Net的优缺

BlogEngine.Net架构与源代码分析系列part12:页面共同的基类

BlogBasePage 上一篇文章我向大家展示了BlogEngine.Net中Theme的原理和一些开发规范,里面有很多内容和这篇文章有着联系,建议大家这两篇文章结合在一起看,这样效果会更好.在这篇文章中我主要向大家说明BlogBasePage,PostViewBase,CommentViewBase这三个类的内部实现上的一些技巧以及它们与页面,文章和评论之间是如何组织在一起的,希望对大家阅读这部分代码有帮助. 认识一下它们 BlogBasePage,PostViewBase,CommentV

BlogEngine.Net架构与源代码分析系列part10:开发扩展(中)

Widget小工具 上篇文章我向大家介绍了BlogEngine.Net中开发扩展的重要一部分--Extension.在本文中我将向大家展示它的另外一种扩展特性,那就是Widget小工具,主要是Widget的开发标准和工作原理等. 什么是Widget与为什么要使用Widget Widget实际上就是一种带有界面的小工具,主要应用在桌面领域,例如:Yahoo!Widget,还有Vista自带的边栏等.在BlogEngine.Net中它就是页面左侧或右侧的那种小的分区,例如Category list,

BlogEngine.Net架构与源代码分析系列part15:总结篇

本文是这个系列的总结篇,在这篇文章里,仅从我个人的角度发表一下对BlogEngine.Net的一些看法.内容包括BlogEngine.Net的优缺点,性能问题,如何阅读源代码等. 重申一下写这个系列的目的 1.使自己更加深入的理解BlogEngine.Net的架构,对BlogEngine.Net的代码能够更深刻的掌握. 2.给那些想学习BlogEngine.Net的源代码,但是不知道从何开始或者比较迷茫的朋友们一个学习指南. 3.在博客园上永远的保存下来,方便你我查看.因为这方面的资料实在太少了

BlogEngine.Net架构与源代码分析系列part4:Blog全局设置

BlogSettings 这已经是本系列的第四篇了,以前我多数时间是看文章,自己写起来才感觉到当博主不容易啊,所以我们无论评论也好,阅读也好,都要尊重博主的劳动成果.闲话少说,在这篇文章中我们将对BlogEngine.Net的全局配置进行一下分析与探讨.关于配置这一部分单独拿出来做一篇文章实在有些牵强,但是我总觉得这个配置部分比较独立,而且BlogEngine.Net的设计和实现都有很多可以参考的地方. 在一个企业级应用系统中,对一些系统全局参数进行配置是必不可少的,那么我们是怎么处理这些配置的

BlogEngine.Net架构与源代码分析系列part13:实现分析(上)

HttpHandlers与HttpModules 这已经是系列的第13篇了,实际上到现在为止您应该对BlogEngine.Net的整体设计有了一定的把握,对部分实现细节有了比较深刻的认识,在阅读BlogEngine.Net时希望坚持到最后,并把握住宏观,深入到微观.本文将详细介绍BlogEngine.Net中的HttpHandlers与HttpModules,主要说明它们要实现的功能以及如何使用,并对几个必要的HttpHandler或HttpModule进行比较细致的分析. HttpHandle