《毕业设计论文基于个人网站建设的CMS内容管理系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于个人网站建设的CMS内容管理系统设计.doc(49页珍藏版)》请在三一办公上搜索。
1、引言内容管理系统,英文名称是Content Management System(CMS),一般认为,CMS是一种位于WEB前端(Web服务器)和后端办公系统或流程(内容创作、编辑)之间的软件系统。内容管理解决方案重点解决各种非结构化或半结构化的数字资源的采集、管理、利用、传递和增值,并能有机集成到结构化数据的商业智能环境中,如OA,CRM 等。内容的创作人员、编辑人员、发布人员使用CMS来提交、修改、审批并发布内容。这里指的“内容”包括文件、表格、图片、数据库中的数据甚至视频等一切需要发布到Internet、Intranet以及Extranet网站的信息。网站CMS机构将内容的采集、使用以及管
2、理和复杂的程序设计、网页编辑相分离。当一个用户请求页面时,各部分联合生成一个标准的HTML页面。网站内容管理系统底层的操作系统、Web服务器和数据库软件必须通过中间件对内容管理系统提供支持,现在网站建设中最常用的中间件是ASP、ASPnet、PHP、JSP等。为了隐藏操作系统和各种服务软件的细节,内容管理系统一般采用分层设计的方法,通常分成核心层和功能扩展层。核心层除提供标准的扩展接口外,还提供基本身份认证、数据库管理和应用程序框架等基本功能。功能扩展层构建在核心层之上,利用核心层的扩展接口,开发出针对不同类型应用的插件和模块。用分层设计的思想开发的内容管理系统,前、后台子系统之间耦合度低,可
3、以方便地插拔模块,系统设计思路清晰,便于不同应用模块的修改升级。1 问题定义(此部分主要由钱佳负责,王勇、夏敦同学协助完成)2 系统可行性分析(此部分主要由钱佳负责,王勇、夏敦同学协助完成)3 系统开发计划及进度(此部分主要由钱佳负责,王勇、夏敦同学协助完成)4 系统需求分析(此部分主要由钱佳负责,王勇、夏敦同学协助完成)5 系统设计目标与原则(此部分主要由钱佳负责,王勇、夏敦同学协助完成)6 系统总体设计(此部分主要由钱佳负责,王勇、夏敦同学协助完成)7 数据库分析与设计(此部分主要由王勇负责,钱佳、夏敦同学协助完成)在设计数据库时我们比较充分地了解到要成功建设个人网站各个方面的需求,包括现
4、有的和将来可能增加的需求。我们严格按照数据库设计的一般步骤进行该数据库的设计,即将该数据库设计分为:数据库规划、数据库需求分析、数据库概念结构设计、数据库逻辑结构设计和数据库结构的实现。7.1 数据库规划对于数据库系统,规划阶段是十分必要的。数据库规划的好坏将直接影响到整个CMS的成功与否,并将对个人网站在互联网人气和访问流量产生深远的影响。随着数据库技术的发展与普及,各个行业在计算机应用中都会提出建立数据库的要求。但是,数据库技术对技术人员和管理人员的水平、数据采集和管理活动规范化以及最终用户使用计算机能力较高要求。同样地,数据库技术对于计算机系统的软、硬件要求也要求较高,至少要有足够的内、
5、外存容量和必要的DBMS软件。规划阶段具体分为以下三个步骤:(1)系统调查在用户需求确实后,根据用户的实际需求,开展系统需求调查。数据库系统调查主要以数据库系统的实现为主,作为可行性分析报告的基础。(2)可行性分析根据数据库系统调查的实际情况,通过决策分析,来确定数据库系统开发方案是否可行,主要是成本与效益分析,如果成本比效益要小,那么数据库系统开发的可行性高;如果成本比效益要大,那么数据库系统实际开发的意义就不大了。(3)确定数据库系统的总目标和制定项目开发计划可行性分析报告出来后,如果该系统确实可行,就要开始制定数据库系统开发的总体方案了。要以调查内容为基础,从总体上来确实数据库系统的目标
6、和制定数据库开发的计划。7.2 数据库需求分析MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。数据库分析是数据库设计的第一个阶段,也是非常重要的一个阶段。数据需求分析阶段首先必须准确了解(包括数据与处理)。收集与分析用户在数据管理中的信息要求,处理要求,安全性和完整性要求。在这个阶段主要是收集基本数据、设计数据结构以及数据处理的流程,组成一份详尽的数据字典,为以后的进一步设
7、计打下基础。数据库的需求分析是整个设计过程中最困难、最耗费时间的一步。需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。数据库是实现有组织地,动态地存储大量关联数据,方便用户访问的计算机软硬资源组成的系统;它与文件系统的重要区别是数据的充分共享,交叉访问,与应用程序的高效独立性。用户的需求具体体现在各种信息的提供、保存、更新和查询,这就是数据库结构能够充分满足各种信息的输入和输出。收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的具体设计打下基础。基于个人网站建设的CMS系统总体上分为应用中心和系统设置,具体包
8、括用户管理模块、文件管理模块、分类管理模块、文章管理模块、音乐管理模块、视频管理模块、图片管理模块、链接管理模块、日记管理模块、留言评论模块等,分别对应不同的数据流。图7-1 网站首页结构图图7-2 系统后台业务流程图7.3 概念结构设计最常用的概念结构设计方法有实体联系法、面向对象设计方法、属性综合法和规范化关系方法。本系统采用的是实体联系法。实体联系方法(Entity-Relationship Approach)。是数据库结构设计常用的方法,它不是严格意义上的数据模型,因为该模型只提供了对数据表及联系的表示,而没有定义在数据上的操作,它是对现实世界的数据的表示,不依赖于具体的数据库管理系统
9、(DBMS Database Management System)。它是目前设计模型的常用工具。实体是客观存在并相互区分的事物,属性是指实体某一方面的特征,属性的取值在一定的范围内 ,这是属性的值域,而关系是实体集合之间存在的关系。这是一种自上而下抽象的方法。在数据需求分析的基础上,设计出能够满足需求的各种实体以及它们的关系。该方法用E-R图来描述现实世界的概念模型。E-R图是各种数据模型的共同基础,因而比数据模型更一般、更抽象、更接近现实世界。以下各ER图中代表此字段是该表的主键,代表外键,代表索引。图7-3 表category的实体联系图图7-4 表group的实体联系图图7-5 表art
10、icle的实体联系图图7-6 表role的实体联系图7.4 物理结构设计数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程,就是数据库的物理结构设计。数据库的物理设计通常分为两步:(1)确定数据库的物理结构。(2)对物理结构进行评价,评价的重点是时间和空间效率。7.4.1确定物理结构数据库的物理结构信赖于所选用的DBMS,信赖于计算机硬件环境,设计人员进行设计时主要需要考虑以下几个方面。(1)确定数据的存储结构 从存取时间、存储空间利用率和维护代价三方面考虑,得出了该数据库的存储结构。表的数据的数据项和数据结构如下所示:表
11、7-1 access编号字段中文名字段英文名数据类型长度可否为空1群组编号role_idsmallint6否2节点编号node_idsmallint6否3节点层号leveltinyint1否4父IDpidsmallint6否5模块名modulevarchar50是表7-2 article编号字段中文名字段英文名数据类型长度可否为空1序号idint10否2所属父类号tidint6否3标题titlevarchar120否4关键字keywordsvarchar120否5描述descriptionvarchar200否6预览图片imgvarchar200否 7内容contenttext否8创建时间ad
12、d_timeint15否9更新时间update_timeint15否10创建者IDadder_idint10否11排序值sortint15否12点击次数apvint10否13URL重写值rewritevarchar200否14状态statusint1否表7-3 category编号字段中文名字段英文名数据类型长度可否为空1序号idint6否2所属父类号pidint6否3分类名titlevarchar60否 4排序值sortint12否5状态statusint1否6关键字keywordsvarchar120否7描述descriptionvarchar200否8所属模块modulevarchar3
13、0否9URL重写值rewritevarchar200否表7-4 diary编号字段中文名字段英文名数据类型长度可否为空1序号idint10否2天气情况weathervarchar60否3内容contenttext否 4添加者IDadder_idint10否5添加时间add_timeint11否6状态statusint1否表7-5 group编号字段中文名字段英文名数据类型长度可否为空1序号idsmallint3否2菜单项目名namevarchar25否3菜单显示名titlevarchar50否 4创建时间create_timeint11否5更新时间update_timeint11否6状态sta
14、tustinyint1否7排序值sortsmallint3否8是否显示showtinyint1否表7-6 link编号字段中文名字段英文名数据类型长度可否为空1序号idint10否2链接名称titlevarchar50否3链接地址urlvarchar200否 4描述introvarchar100否5排序值sortint11否6状态statusint1否表7-7 message编号字段中文名字段英文名数据类型长度可否为空1序号idint10否2父信息IDpidint10否3文章IDaidint10否 4发表人昵称adder_namevarchar200否5Emailadder_emailvarc
15、har200否6类型(1:文章评论, 2:留言)typeint1否7发表人ID(0:游客)adder_idint10否8内容contentvarchar200否9发表时间add_timeint11否10发表人IPipvarchar15否11状态statusint1否表7-8 music编号字段中文名字段英文名数据类型长度可否为空1序号idint10否2音乐名titlevarchar100否3作者authorvarchar60否 4链接地址urlvarchar200否5排序值sortint12否6所属分类tidint10否7添加者IDadder_idint10否8添加时间add_timeint1
16、1否9状态statusint1否表7-9 node编号字段中文名字段英文名数据类型长度可否为空1序号idsmallint6否2应用名/模块名namevarchar20否3显示名titlevarchar50是4状态statustinyint1否(0)5备注remarkvarchar255是6排序值sortsmallint6是7父节点IDpidsmallint6否8第几层(共3层)leveltinyint1否9类型typetinyint1否10分组IDgroup_idtinyint3否表7-10 photo编号字段中文名字段英文名数据类型长度可否为空1序号idint10否2图片名称titlevar
17、char100否3图片简介introvarchar200否 4图片地址imgvarchar200否5链接地址linkvarchar200否6所属分类tidint10否7排序值sortint12否8添加者IDadder_idint10否9添加时间add_timeint11否10状态statusint1否表7-11 role编号字段中文名字段英文名数据类型长度可否为空1序号idsmallint6否2组名namevarchar20否3上级组pidsmallint6否 4组状态statustinyint1否5描 述remarkvarchar255否6实体名enamevarchar5否7创建时间crea
18、te_timeint11否8更新时间update_timeint11否表7-12 role_user编号字段中文名字段英文名数据类型长度可否为空1群组IDrole_idmediumint9是2用户IDuser_idchar32是表7-13 router编号字段中文名字段英文名数据类型长度可否为空1序号idint11否2重写URLrewritevarchar200否3原始URLurlvarchar200否 表7-14 user编号字段中文名字段英文名数据类型长度可否为空1序号idsmallint5否2用户名accountvarchar64否3昵称nicknamevarchar50否 4密码pas
19、swordchar32否5组合账号bind_accountvarchar50否6最后登录时间last_login_timeint11否(0)7最后登录所在IPlast_login_ipvarchar40是8登录次数login_countmediumint8否(0)9是否验证verifyvarchar32是10邮箱emailvarchar50否11备注remarkvarchar255否12创建时间create_timeint11否13更新埋单update_timeint11否14状态statustinyint1是(0)15类型(0:管理员)type_idtinyint2是(0)表7-15 vid
20、eo编号字段中文名字段英文名数据类型长度可否为空1序号idint10否2视频标题titlevarchar200否3关键字keywordsvarchar100否 4描述descriptionvarchar200否5预览图片imgvarchar200否6链接地址urlvarchar200否7URL重写rewritevarchar200否8排序值sortint12否9所属分类tidint10否10添加者IDadder_idint10否11添加时间add_timeint11否12状态statusint1否(2)设计数据的存取路径:主要是指确定如何建立索引。在系统中建立了单索引作为存取路径,即在每个数据
21、表里的ID建立了索引。(3)确定数据的存放位置:主要考虑提高系统性能,因此应将数据中易变部 分与稳定部分、经常存取部分和存取频率低部分分开存放。本系统保留了数据库的备份和日志文件,以便于出现故障时恢复数据。(4)确定系统配置:在设计系统时对系统的配置变量进行了初步的配置,在系统运行过程中根据具体情况调整。7.4.2评价物理结构数据库物理设计过程中需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案,数据库设计人员必须对这些方案进行细致的评价,从中选择一个较优方案作为数据库的物理结构。评价方法完全信赖于所选用的DBMS,主要是从定量方法评估。如果数据库结构不符合用户需
22、求,则需要修改设计。本系统是在权衡了各种因素以后所得出的最终结构。7.5 数据库的实施阶段综上分析,我们在需求分析和数据库概念结构设计的基础上得到了数据库的逻辑结构之后,通过创建SQL文件,导入到phpMyAdmin中就顺利创建了数据库基于个人网站建设的CMS。 7.6 数据库的运行和维护阶段基于个人网站建设的CMS的数据库投入运行标志着系统开发工作的基本完成和维护工作的开始,而数据库只要存在一天,就需要不断地对它进行评价、调整和维护。在数据库运行阶段,对数据库的经常性的维护工作主要有数据库管理员完成,在这个过程中本人就是数据库管理员,主要工作包括:(1)数据库的备份和恢复。数据库管理员要定期
23、备份数据库,一般为一星期一次,一旦出现故障,可以及时将数据库恢复到尽可能的正确状态,以减少数据库的损失。(2)数据库的安全性和完整性控制。有时我们要收回某些用户的权限,增加、修改某些用户的权限,增加、删除用户,或者某些数值的取值范围发生变化,则对数据库的安全性和完整性要求也会发生变化,这时就需要我队数据库进行适当的调整,以反映这些新的变化。(3)监视、分析、调整数据库性能。本人要监视数据库的运行情况,并对检测数据进行分析,找出能够提高性能的可行性,并适当地对数据库进行调整。在目前有些DBMS产品提供了性能检测工具,从而可以利用这些工具方便地监视数据库。(4)数据库的重组。本系统数据库经过一段时
24、间的运行后,随着数据的不断添加、删除和修改,会使该数据库的存取效率降低,这时本人便可改变数据库组织方式,通过增加、删除或调整部分索引等方法,改善系统的性能。当然,数据库的结构和应用程序设计的好坏只是相对的,它并不能保证数据库应用系统始终处于良好的性能状态。这是因为数据库中的数据是随着数据库的使用而变化的,随着这些变化的不断增加,系统的性能就会有所下降,所以即使我们的系统不出现故障,我们也要对数据库进行维护,便始终能够获得较好的性能。在进行完这一阶段之后,便要进行系统实现了。8 详细设计(此部分主要由王勇负责,钱佳、夏敦同学协助完成) Personal Website CMS基于ThinkPHP
25、, JQuery, Dwz框架开发而来,完全遵循MVC开发思想,代码精炼规范,系统安全性高,运行效率高。 应用中心模块完全基于插件形式设计,可以自由移除,添加模块而不影响到其它模块。 程序、设计、功能等各方面高度协调统一,对BUG反应及时迅速。 界面简洁大气,关注于细节处理,模板制作简单,可以方便的制作适合自己的模板。 内置视频、音频播放器可以播放站内多媒体资源,展示自己的品味与爱好。 对SEO友好,可以自由指定每篇内容的关键字,描述以及给外界访问的URL,连显示的模板也是可以自由定制的。 网友可以向站长推荐音乐、视频、交换链接、留言评论等,促进站长与外界的交流。 后台实现了基于角色的权限控制
26、系统,控制精确到每一个操作,方便多人管理后台。根据前面的系统分析和总体设计,本系统设计如下的总体模块结构功能图:图8-1 系统总体模块结构功能图为了详细描述系统各模块功能,我们在系统功能模块划分的基础上,对以上各模块功能,自顶向下逐层设计分解。8.1分类管理模块这一模块主要是创建文章、音乐、视频等各种类别,基于个人网站建设的CMS系统只支持最多两层分类,因为二级目录已经完全足够网站的功能需求了,更深层次分类只会加大系统的开销。其结构功能图如下图所示:图8-2 分类管理模块的结构功能图8.1.1新增分类接口设计说明(1)功能实现:本接口主要实现系统新分类的添加,以显示在网站的菜单栏上,如是添加分
27、类的“所属父类”是顶级分类则该分类是一级菜单;“所属模块”可以选择文章模块、音乐模块、视频模块和图片模块,相应模块有专门的显示模板输出。 (2)本接口大致的程序流程图如下图所示:图8-3 增加分类模块程序流程图(3)新增分类接口最终设计结果如下图所示:图8-4 增加分类界面(4)增加分类实现的部分源代码:文章模块,Music=音乐模块,Video=视频模块,Photo=图片模块);return $modules;display ();assign(module,$model-getModule();/赋值可用模块public function _before_add() $model=D(Ca
28、tegory);$list=$model-where(status=1 AND pid=0)-select();$this-assign(list,$list);$this-assign(module,$model-getModule();/赋值可用模块public function _before_edit() $model=D(Category);$list=$model-where(status=1 AND pid=0)-select();$this-assign(list,$list);$this-assign(module,$model-getModule();/添加分类public
29、 function insert()$model = D (Category);if (false = $model-create () $this-error ( $model-getError () );/保存当前数据对象$list=$model-add ();if ($list!=false) /保存成功if($_POSTrewrite)$datarewrite=$_POSTrewrite; $dataurl=strtolower($_POSTmodule)./index/id/.$model-getLastInsID(); D(Router)-add($data);$this-succ
30、ess (新增成功!); else /失败提示$this-error (新增失败!);8.1.2编辑分类接口设计说明(1)功能实现:选择一个分类,进入修改分类窗体,更改字段值,判断是否满足约束条件,成功则保存修改后的分类信息到数据库并显示分类列表。(2)编辑分类接口的最终设计结果如下图所示:图8-5 编辑分类界面(3)编辑分类实现的部分源代码:/编辑分类public function update() $model = D ( Category );$category = $model-find($_POSTid);if (false = $model-create () $this-erro
31、r ( $model-getError () );/ 更新数据$list=$model-save ();if (false != $list) /成功提示D(Router)-where(url=.strtolower($categorymodule)./index/id/.$_POSTid.)-delete();if($_POSTrewrite)$dataurl=strtolower($_POSTmodule)./index/id/.$_POSTid;$datarewrite=$_POSTrewrite;D(Router)-add($data);$this-success (编辑成功!); e
32、lse /错误提示$this-error (编辑失败!);8.1.3删除分类接口设计说明(1)功能实现:选择要删除的分类,弹出确认提示窗体,点出确定就可以删除数据库中的记录。(2)删除分类实现的部分源代码: /删除分类的同时,删除路由规则 public function _before_foreverdelete() if($_GETid)$id = $_GETid;$rewrite=D(Category)-where(id=.$id)-getField(rewrite);D(Router)-where(rewrite=.$rewrite.)-delete(); 8.1.4树形结构显示接口设计
33、说明(1)功能实现: 以树状形式显示分类列表,更直观的表达各分类的父子关系。(2)树形结构显示接口的最终设计结果如下图所示:图8-6 树形结构显示页面(3)树形结构显示实现的部分源代码:/树形结构数据组装public function tree()$model = D(Category);$list = $model-where(pid=0)-select();if($list)foreach ($list as $key=$val)$list$keysub_category= $model-where(pid=.$valid)-select(); $this-assign(list,$lis
34、t);$this-display();8.1.5查询模块接口设计说明(1)功能实现:这个功能是写在通用控制器类CommonAction.class.php中的,因为很多模块都有查询功能;前台有站内搜索, 后台各模块有模糊查询、精确查询和按分类查询。(2)分类查询模块接口的最终设计结果如下图所示:图8-7 站内搜索页面图8-8 分类查询页面(3)查询模块接口实现的部分源代码: class CommonAction extends Action protected function _search($name = ) /生成查询条件if (empty ( $name ) $name = $this
35、-getActionName();$name=$this-getActionName();$model = D ( $name );$map = array ();foreach ( $model-getDbFields () as $key = $val ) if (isset ( $_REQUEST $val ) & $_REQUEST $val != ) $map $val = $_REQUEST $val;return $map; protected function _list($model, $map, $sortBy = , $asc = false) /排序字段 默认为主键名i
36、f (isset ( $_REQUEST _order ) $order = $_REQUEST _order; else $order = ! empty ( $sortBy ) ? $sortBy : $model-getPk ();/排序方式默认按照倒序排列/接受 sost参数 0 表示倒序 非0都 表示正序if (isset ( $_REQUEST _sort ) $sort = $_REQUEST _sort ? asc : desc; else $sort = $asc ? asc : desc;/取得满足条件的记录数$count = $model-where ( $map )-c
37、ount ( id );if ($count 0) import ( ORG.Util.Page );/创建分页对象if (! empty ( $_REQUEST listRows ) $listRows = $_REQUEST listRows; else $listRows = ;$p = new Page ( $count, $listRows );/分页查询数据$voList = $model-where($map)-order( . $order . . $sort)-limit($p-firstRow . , . $p-listRows)-findAll ( );/分页跳转的时候保
38、证查询条件foreach ( $map as $key = $val ) if (! is_array ( $val ) $p-parameter .= $key= . urlencode ( $val ) . &;/分页显示$page = $p-show ();/列表排序显示$sortImg = $sort; /排序图标$sortAlt = $sort = desc ? 升序排列 : 倒序排列; /排序提示$sort = $sort = desc ? 1 : 0; /排序方式/模板赋值显示$this-assign ( list, $voList );$this-assign ( sort, $sort );$this-assign ( order, $order );$this-assign ( sortImg, $sortImg );$this-a