第9章Blog随着Blog(博客)的快速发展,Blog已经成为朋友、家庭之间越来越盛行的沟通工具,是当今网络不可缺少的一部分。同时,Blog也逐渐被应用在企业、公司或集团内部的网络(Intranet)中。本章将介绍如何创建一个Blog系统(或网络应用程序)。用户可以在该系统中创建属于自己的Blog空间,从而发表自己的文章和链接,以及文章和链接的评论等。Blog系统的前台主页面的效果,后台主页面效果,本章系统(网络应用程序)的名称为Blog。9.1什么是Blog“博客”(Blog或Weblog)的全名为WebLog(网络日志),后来缩写为Blog。起初,它是一种十分简易的傻瓜化个人信息发布方式,使得任何人都可以创建个人主页,并且可以发表和更新自己的文章和图片,或其他信息。如果把论坛(BBS)比喻为开放的广场,那么博客就是个人开放的私人房间。9.1.1Blog概述博客(Blogger)就是写Blog的人,即使用特定的软件,在网络上出版、发表和张贴个人文章的人。简单地说,博客是一类习惯于在网上写日记的人。Blog就是一种表达个人思想、网络链接、内容,按照时间顺序排列,并且不断更新的出版方式。Blog是继E-mail、BBS、ICQ之后出现的第4种网络交流方式。它是网络时代的个人“读者文摘”。它是以超级链接为武器的网络日记。它是代表着新的生活方式和新的工作方式,更代表着新的学习方式。9.1.2Blog发展历史Blog经过10多年的发展,已经发展成为网络不可缺少的一部分。下面根据时间对它的发展过程中一些重要纪事作简单介绍。1993年6月,最古老的Blog原型——NCSA的“What'sNewPage”网页(),该网页主要是罗列网络上新兴的网站索引。该网页起始于1993年6月,一直更新到1996年6月。9.2总体功能设计和数据库设计本小节将介绍Blog系统的总体功能设计和数据库设计,以及数据库中各个表之间的关系设计。9.2.1总体功能设计Blog系统实现的主要功能如下:1.用户和角色管理功能2.文章分类管理功能3.文章发布及其管理功能4.链接收藏及其管理功能5.Blog前台功能9.2.2表设计Blog系统主要包括用户、角色、文章分类、文章、文章的评论、文章的访问来源、链接地址,以及Blog系统前台的配置参数等数据。在此,笔者共创建了9个表,具体说明如下。1.角色表Role2.用户表User3.分类表BlogCatalog4.文章表BlogArticle5.链接表BlogUrl6.访问来源表BlogArticleSource7.文章评论表BlogComment8.皮肤表BlogSkin9.收藏表BlogFavorite9.2.3表关系设计Blog系统的数据库比较简单,各个表之间的关系,其中,文章表BlogArticle和链接表BlogUrl分别引用分类表BlogCatalog的ID字段作为外键;皮肤表BlogSkin引用用户表User的ID字段作为外键;访问来源表BlogArticleSource引用文章表BlogArticle的ID字段作为外键;文章评论表BlogComment分别引用用户表User、文章表BlogArticle的ID字段作为外键。9.3应用程序Blog本小节主要介绍应用程序Blog的组成,及其通用模块的设计。其中,该应用程序由Web窗体页、类文件、主题文件、资源文件等组成。通用模块包括一个名称为“模块标题”的用户控件ModuleTitle.ascx。它存放在UserControl目录下。9.3.1应用程序Blog的组成应用程序Blog包含Admin、App_Code、App_Themes、Bin、Face、Index、Portal、UserControl目录,以及页面Default.aspx、配置文件Web.Config、全局文件Global.asax等。展开Index和Portal目录,在【解决方案资源管理器】面板中查看应用程序Blog,它的组成如图9.4和图9.5所示。9.3.2系统配置文件Web.Config应用程序Blog的配置文件Web.Config放置在其的根目录下。笔者在该文件中配置了访问数据库Web2ASPNET2DB的链接字符串“datasource=localhost;userid=sa;pwd=123456;database=Web2ASPNET2DB”;同时还配置了应用程序Blog的验证方式为“Windows”。9.3.3添加应用程序的引用笔者向应用程序Blog添加了3个引用文件(文件的后缀名为.dll)。它们具体为:Web2ASPNET2.CommonOperation.dll;Web2ASPNET2.OperateSqlServer.dll;Web2ASPNET2.UserCommonOperation.dll。9.3.4主页Default.aspx应用程序Blog的主页Default.aspx特别简单。该页面在Page_Load(objectsender,EventArgse)事件中重定向到Blog应用程序的前台首页Index.aspx(其中,该页面放置在Index目录下)。程序代码如下所示。protectedvoidPage_Load(objectsender,EventArgse){Response.Redirect(~/Portal/Index.aspx);///Blog应用程序的前台首页}9.3.5通用模块设计该应用程序中的通用模块和应用程序RSS的通用模块相同,它们的具体实现请参见8.3.5小节。9.3.6应用程序初始化应用程序Blog在全局文件Global.asax中初始化系统。其中,初始化操作由类WebBlog实现。它定义了用于系统初始化的静态方法publicstaticvoidSystemInit(HttpContextcontext)和两个属性:BoardFilePath和Face。其中,BoardFilePath属性保存Blog前台配置文件的访问地址;Face属性保存系统当前皮肤的名称。9.3.7数据访问层设计在应用程序Blog的数据访问层中,笔者定义了操作与Blog内容(如文章、文章分类、回复、链接等)的类Blog。类Blog定义的操作或方法可以分为以下4种类型:与文章相关的操作。与链接相关的操作。与评论和访问来源相关的操作。与Blog前台皮肤相关的操作。9.4关键技术详解本小节主要介绍Blog系统中的关键技术。这些技术包括Blog前台实现原理、Blog前台首页、Blog前台显示文章页面、动态调整Blog前台皮肤、收集文章访问来源、读取Blog前台的配置文件、评论文章等。9.4.1Blog前台组成应用程序Blog的前台主要由两个页面和7个用户控件组成。其中,页面为Index.aspx和ShowArticle.aspx。用户控件为AddCommentUC.ascx、ArticleUC.ascx、CalendarUC.ascx、CatalogUC.ascx、SetSkinUC.ascx、ShowArticleUC.ascx和ShowCommentUC.ascx。上述页面和用户控件都放置在Index文件夹中,9.4.2文章分类用户控件文章分类用户控件CatalogUC.ascx显示文章的分类信息。CatalogUC.ascx.cs文件为它的代码隐藏文件。该用户控件添加了一个GridView控件,其ID属性的值为gvCatalog。该控件显示系统中的文章分类信息。用户控件CatalogUC.ascx的设计界面,9.4.3日历用户控件日历用户控件CalendarUC.ascx显示日历信息。CalendarUC.ascx.cs文件为它的代码隐藏文件。该用户控件添加了一个日历控件,其ID属性的值为cDate。用户控件CalendarUC.ascx的设计界面,9.4.4文章列表用户控件文章列表用户控件ArticleUC.ascx以列表形式显示文章的信息。ArticleUC.ascx.cs文件为它的代码隐藏文件。该用户控件添加了一个GridView控件,其ID属性的值为gvArticle。该控件以列表形式显示文章的信息,包括文章的标题、摘要、评论数量、发布时间等。用户控件ArticleUC.ascx的设计界面,9.4.5显示文章用户控件显示文章用户控件ShowArticleUC.ascx显示文章的具体信息,如文章的标题、评论次数、发表时间、发表用户等。ShowArticleUC.ascx.cs文件为它的代码隐藏文件。该控件未添加任何服务器端控件,它的设计界面,9.4.6显示评论用户控件显示评论用户控件ShowCommentUC.ascx显示文章的评论。ShowCommentUC.ascx.cs文件为它的代码隐藏文件。该用户控件添加一个GridView控件,ID属性的值为gvComment。该控件显示当前文章的评论。用户控件ShowCommentUC.ascx的设计界面,9.4.7评论用户控件评论用户控件AddCommentUC.ascx可以添加文章的评论。AddCommentUC.ascx.cs文件为它的代码隐藏文件。该用户控件添加3个TextBox控件、一个Button控件和两个非空验证控件。它们的ID属性的值分别为tbName、tbUserName、tbBody、btnAdd、rfBody和rfName。tbName和tbBody控件分别用来输入评论的标题和内容。tbUserName控件用来显示用户的名称。btnAdd控件实现添加评论的功能。rfName和rfBody控件分别对用户输入评论的标题和内容进行非空验证。用户控件AddCommentUC.ascx的设计界面9.4.8Blog前台页面的实现原理Blog前台页面的均由两部分组成:左版面和右版面。每一个版面包括其基本属性和模块列表,9.4.9Blog前台页面的配置文件Blog前台页面的配置文件为一个XML文件,名称为Default.xml。它存放在Face文件夹下。该配置文件包括Faces、Default(为皮肤的名称,由具体皮肤的名称确定)、Index(页面的版面)、Modules(版面的模块)、Module(具体模块)等5个级别的元素。9.4.10读取Blog前台配置文件读取Blog前台配置文件的功能由类OperateXmlFile实现。它定义了3个静态方法,具体描述如下:(1)publicstaticArrayListGetFaces(),获取系统已经定义的皮肤。(2)publicstaticTableCellBase[]GetIndexPage(stringface),获取Blog前台的首页的配置。(3)publicstaticTableCellBase[]GetShowArticlePage(stringface),获取Blog前台的显示文章页面的配置。9.4.11动态加载Blog前台的首页Blog前台的首页由页面Index.aspx实现,它的代码隐藏文件为Index.aspx.cs。该页面将显示文章分类、收藏日历、调整皮肤下拉选择框、文章列表等内容。页面Index.aspx的最终效果,9.4.12动态加载Blog前台的显示文章页面Blog前台的显示文章页面由页面ShowArticle.aspx实现,ShowArticle.aspx.cs文件为它的代码隐藏文件。该页面将显示文章分类、收藏日历、文章具体信息、文章评论和提供评论的内容输入框等。页面ShowArticle.aspx的最终效果,9.4.13动态调整Blog平台皮肤动态调整Blog平台皮肤功能由用户控件SetSkin.ascx实现,SetSkin.ascx.cs文件为它的代码隐藏文件。该用