基于PHP的CMS网站系统开发及应用.doc

上传人:laozhun 文档编号:2388789 上传时间:2023-02-17 格式:DOC 页数:33 大小:457KB
返回 下载 相关 举报
基于PHP的CMS网站系统开发及应用.doc_第1页
第1页 / 共33页
基于PHP的CMS网站系统开发及应用.doc_第2页
第2页 / 共33页
基于PHP的CMS网站系统开发及应用.doc_第3页
第3页 / 共33页
基于PHP的CMS网站系统开发及应用.doc_第4页
第4页 / 共33页
基于PHP的CMS网站系统开发及应用.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《基于PHP的CMS网站系统开发及应用.doc》由会员分享,可在线阅读,更多相关《基于PHP的CMS网站系统开发及应用.doc(33页珍藏版)》请在三一办公上搜索。

1、摘 要网络的日益发展,使动态网站的开发和管理倍受人们的关注。在这里,介绍了基于PHP框架CodeIgniter的CMS网站系统的开发,剖析了MVC架构在使用过程中的优势,展现了整个后台的制作流程。该CMS以PHP做为主要语言,采用MySQL做为数据库支持。为了方便开发,选用了CI框架,该框架可以实现简单入门、快速开发等。利用以上技术实现了一个小型CMS系统,该系统后台的主要功能有:文章管理、分类管理、静态页面生成、用户管理及系统管理。关键字:PHP,CMS,CodeIgniter,网站开发Abstract The increasing development of the network, s

2、o that dynamic website development and management of much attention. Here, the introduced based on the CMS website PHP framework CodeIgniter system development, analysis of the MVC architecture in the use of the advantages of the process, displaying the entire background of the production process. T

3、he CMS with PHP as the main language, the use of MySQL as a database support. To facilitate the development, selection of the CI framework that can simple entry and rapid development. Using the above technology, a small CMS system, which has the main function of the background: The article managemen

4、t, classification management, static page generation, user management and system management.keywords:PHP,CMS,CodeIgniter,Web Development目 录摘 要2Abstract3前 言6第一章 技术概述71.1、PHP71.2、CodeIgniter71.3、MySQL71.4、JQuery7第二章 开发环境的安装与配置9第三章 系统设计103.1、系统概述103.2、功能模块分析103.3、编码规定10第四章 数据库设计12第五章 CodeIginter的安装及配置1

5、5第六章 后台开发166.1、搭建后台基本功能166.2、后台界面设计196.3、分类管理216.3.1、分类的添加、删除216.3.2、分类属性编辑(图6.3.2)246.4、文章管理266.4.1、文章添加、编辑266.4.1、文章的删除296.5、用户管理296.6、系统管理306.6.1、基本参数306.6.2、友情链接30结 论31参考文献32致谢33基于PHP的CMS网站系统开发及应用(免费提供下载)我的毕业设计,具体效果看大家点击广告支持一下,让咱这个破学生也赚几个小钱作者:zhjx922前 言动态网站系统是建立在网络基础设施之上的Web应用系统,它由前台和后台两部分构成,后台包

6、括一组应用服务程序、Web服务器、应用服务器、数据库服务器等,前台是通过浏览器展示信息,实现与用户交互的一组网页。合理的体系结构和良好的程序设计是实现网站功能的基础,友好简洁的交互界面是发挥网站系统功能优势的条件。传统静态网站建设中存在的主要问题有:页面制作风格不统一,难以形成独立可复用的模块,降低了应用集成的灵活性和可扩展性;内容组织繁琐,管理效率低下,严重影响了更新效率,难以对信息进行统一管理;应用开发技术难度大,网站后台开发与前台页面的开发都需要开发人员编写代码,代码编写量大;网站开发周期长。为了解决传统静态网站建设中产生的系列问题,形成了以动态网页技术和数据库技术为基础的CMS(con

7、tentmanagementsystem,内容管理系统),它能针对政府和企业网站建设需求,专门面向网站内容编辑、发布与管理的应用系统。CMS 的优势有:能够比较灵活的定制栏目,对栏目进行分类、增删改和排序等管理;CMS 表现和内容分离,用户体验与内容质量的和谐统一,能够方便地对信息发布、录入、修改、删除;能够方便的管理网站的图片、文档、软件等一切资源,达到资源共享;简化了网站的内容供给和内容管理的责任委托,能够对信息的安全性和权限进行控制,保证信息访问的安全性和灵活性;能够有效统一网站风格;能在任意地点和时刻进行信息发布,把动态的内容利用静态的页面发布出去,提高网站的访问速度;CMS 集成性高

8、,整体高效灵活,扩展性和易维护性好。第一章 技术概述本系统采用 CodeIgniter框架(以下简称CI) + MySQL数据库开发,CI使用了模型(Model)- 视图(View)- 控制器(Controllers)的方法(简称MVC),这样可以更好地使表现层和逻辑层分离。这对项目的模板设计者来说是非常有用的,它最小化了模板中的程序代码量。1.1、PHPPHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用。PHP独特的语法混合了 C、

9、Java、Perl 以及 PHP 自创新的语法它可以比 CGI 或者 Perl 更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。1.2、CodeIgniterCodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包。她提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速

10、地进行项目开发。使用 CodeIgniter 可以减少代码的编写量,并将你的精力投入到项目的创造性开发上。1.3、MySQLMySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.对于Mysql的前途,没有任何人抱乐观的态度.目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。1.4、JQueryjQuery由美国人John Resig创建,至今已吸引

11、了来自世界各地的众多javascript高手加入其team,包括来自德国的Jörn Zaefferer,罗马尼亚的Stefan Petre等等。jQuery是继prototype之后又一个优秀的Javascrpt框架。其宗旨是WRITE LESS,DO MORE,写更少的代码,做更多的事情。它是轻量级的js库(压缩后只有21k) ,这是其它的js库所不及的,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、e

12、vents、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。第二章 开发环境的安装与配置在系统中按部就班的配置PHP的运行环境相对比较麻烦,所以我直接选择了WampServer。wampserver是在windows下将Apache+PHP+Mysql 集成环境,拥有简单的图形和菜单安装和配置环境。PHP扩展、Apache模块,开启/关闭鼠标点点就搞

13、定,再也不用亲自去修改配置文件了,WAMP它会去做。再也不用到处询问PHP的安装问题了,wampserver一切都搞定了。我选择的是WampServer2.0i版本,里面包含的软件版本分别为:Apache2.2.11、MySQL5.1.36、PHP5.3.0开发工具我选择了EasyEclipse for PHP。相比Zend Studio,没有它那么“庞大”,但是功能缺一点都不少,对于我们一般的开发者来说足够了。第三章 系统设计3.1、系统概述CMS是Content Management System的缩写,意为内容管理系统,它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本

14、。CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子邮件档案。3.2、功能模块分析内容模块因为做的是内容管理系统,所以这一块儿也是使用最频繁的一个模块了,我们的文章、图片、视频都是从这里添加,功能:文章添加、编辑、删除等分类模块设置网站的分类信息,方便用户查看各类信息,功能:分类添加、删除、分类属性等用户模块管理用户信息,查找用户的注册时间,注册IP等,功能:普通会员、管理员的添加、删除等系统模块设置网站基本参数、上传路径、水印文字、友情链接等3.3、编码规定考虑到编码不统一照成的各种错误,所以我选用UTF-8编码首先设置EasyEclipse for PH

15、P的默认编码。1、 依次打开WindowsPreferences-General-Workspace,将里面的Text file encoding设置为UTF-82、 然后打开WindowsPreferences-General-Content Types,将Text下面的所有文件都设置成UTF-8这样,在开发过程中,就会减少各种因为编码不统一,照成的各种问题,网站具体功能模块如下图:第四章 数据库设计开发之前,先设计数据库,我们要实现的功能有:文章管理、分类管理、用户管理、网站系统信息和友情链接管理,首先建立数据库zhjx922,同样的编码设定为UTF-8,建表信息如下:文章表:字段名称数据

16、类型字段大小是否主键说明aidint20是自动编号IDtitlechar160标题sourcechar160来源authorchar30作者keychar200关键字sort_idint8对应分类IDcontenttext内容countint20点击量updateint20更新时间(记录时间戳)分类表字段名称数据类型字段大小是否主键说明sidint10是自动编号IDfidint10父分类IDsort_namechar50分类名称sort_orderint8排序sort_datechar20添加时间sort_typeint2分类类型sort_contributetinyint2是否支持投稿sor

17、t_hiddentinyint2是否隐藏栏目sort_competenceint2浏览权限sort_tagchar50分类标签其它表单建表代码:/*评论表单*/CREATE TABLE dz_comments(id INT(20) NOT NULL AUTO_INCREMENT,comments_art_id INT(20) NOT NULL,comments_user CHAR(20) NOT NULL,comments_mail CHAR(30) NOT NULL,comments_site CHAR(30) NOT NULL,comments_comments TEXT NOT NULL

18、,comments_date CHAR(20) NOT NULL,PRIMARY KEY (id)ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;/*网站访问信息表单*/CREATE TABLE dz_count(id INT(20) NOT NULL AUTO_INCREMENT,count_date CHAR(20) NOT NULL,count_day INT(20) NOT NULL,PRIMARY KEY (id)ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;/*链接表单

19、*/CREATE TABLE dz_links(lid INT(10) NOT NULL AUTO_INCREMENT,links_name CHAR(50) NOT NULL,links_site CHAR(100) NOT NULL,links_date CHAR(20) NOT NULL,PRIMARY KEY (lid)DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;/*用户表单*/CREATE TABLE dz_member(mid INT(5) NOT NULL AUTO_INCREMENT,username CHAR(20) NOT NULL,pass

20、word CHAR(50) NOT NULL,cercode CHAR(50) NOT NULL,email CHAR(32),regip CHAR(15),regdate INT(10),lastloginip INT(10),lastlogintime INT(10),group_id INT(2),PRIMARY KEY (mid)DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1;21232f297a57a5a743894a0e4a801fc3/*网站参数表单*/CREATE TABLE dz_sys(sys_name CHAR(50) NOT NULL,sys

21、_value CHAR(200),sys_explain CHAR(50),PRIMARY KEY (sys_name)DEFAULT CHARSET=UTF8;第五章 CodeIginter的安装及配置我的网站设定在E:wampwwwzhjx922目录下首先下载好CI 1.7.2的压缩包,只需把里面system文件夹和index.php文件解压到根目录下简单配置一下,打开 app/config/config.php,$configbase_url= http:/localhost/zhjx922/;$configsubclass_prefix = DZ_;然后打开app/config/dat

22、abase.php设置数据库参数$dbdefaulthostname = localhost;$dbdefaultusername = root;$dbdefaultpassword = ;$dbdefaultdatabase = zhjx922;$dbdefaultdbdriver = mysql;$dbdefaultdbprefix = dz_;添加HMVC支持CI是MVC架构,为了开发方便,在网上找个一个HMVC模块modular_extensions_5231,将里面的3个文件(Controller.php、Modules.php、MY_Router.php)解压以后放到app/lib

23、rary里面。App下新建modules目录。里面就可以放不同的模块了。如图:第六章 后台开发6.1、搭建后台基本功能启动WampServer,然后启动EasyEclipse for PHP为方便后台的管理,后台所有的程序均继承app/libraries下DZcms类,该类主要是判断管理员是否登录,以保证程序后台的安全代码如下:/DZcms类继承Controllerclass DZcms extends Controller function DZcms()/构造函数parent:Controller();$this-is_login();/判断用户是否登录/操作提示function msg(

24、$msg,$url)$datamsg = $msg;$dataurl = $url;$this-load-view(msg ,$data);/*判断用户是否登录的函数*这里调用了CI自带的两个方法fetch_class和fech_method来判 *断当前所在的类和方法*/ function is_login()if($this-session-userdata(login_name) = TRUE)if($this-router-fetch_class() = member & $this-router-fetch_method() = login) redirect(admin); els

25、eif($this-router-fetch_method() != login) redirect(member/login); 为了方便开发,于是扩展了一下Loader核心类,在app/libraries下新建文件DZ_Loader.php,关键代码如下:class DZ_Loader extends Loader public function Loader() parent:Loader();public function view($view, $vars = array(), $return = FALSE) $varsadminurl = $this-config-item(ba

26、se_url).APPPATH.admin/;/后台文件存放位置$varsbaseurl = $this-config-item(base_url).web/;return Loader:view($view, $vars, $return);/前台文件存放位置CI里面有一个非常好,非常方便的功能-模型(Model),只要按照CI的要求写出我们自己的模型,可以方便的调用,我把数据库中各个表的操作放到了app/models中,根据表的名字,建立了article_model.php、links_model.php、member_model.php、sort_model.php、sys_model.

27、php,以article_model.php为例:/*首先继承Model*/class Article_model extends Modelfunction Article_model()parent:Model();$this-dz_db = article;/表的名称/*获取文章总数*/function art_count()$this-db-join(sort, sort.sid = .$this-dz_db.sort_id);$this-db-order_by(aid, desc);$this-db-from($this-dz_db);return $this-db-count_al

28、l_results();/运用CI的Active Record 类,有效减少程序代码,增加代码质量function get_art_sort($sid, $limit = 0, $offset = 1)$this-db-join(sort, sort.sid = .$this-dz_db.sort_id);$this-db-where(sort_id, $sid);$this-db-limit($offset, $limit);$this-db-order_by(update, desc);$query = $this-db-get($this-dz_db);return $query-res

29、ult_array();6.2、后台界面设计我把后台所需的CSS,JS及IMAGES统一放在app/admin目录下面接着就是后台的入口,app/modules下的admin控制器代码如下:/后台所有类均继承DZcmsclass Admin extends DZcmsfunction Admin()parent:DZcms();function index()$this-load-view(admin);/加载后台视图后台首页面整个后台使用DIV+CSS布局,及iframe框架,考虑到到适应各种浏览器,在这里运用了相对布局及相关jQuery插件,布局关键代码于admin.php中,CSS样式则

30、写在admin.css文件中,而一些常用JS写在admin.js中。后台的样式布置好了,然后就进入了我们的功能开发阶段。6.3、分类管理上图:分类界面(6.3.1)上图:分类属性(6.3.2)6.3.1、分类的添加、删除该部分运用了AJAX的无刷新技术,快速、明了的添加删除分类(图6.3.1)关键JQUERY代码如下(实现了无刷新添加分类的功能):/* 添加顶级分类 */$(.add_top).click(function()$(this).parent().parent().before(););/* 添加自分类 */$(.add_son).click(function()var order

31、 = new + $(this).parent().prev(td).children(input).attr(name) + ;var name = new + $(this).prev(input).attr(name) + ;$(this).parent().parent().after(););$(.add_son1).click(function()var order = $(this).parent().prev(td).children(input).attr(name) + ;var name = $(this).prev(input).attr(name) + ;var cc

32、 = $(this).prevAll(span).html() + ;$(this).parent().parent().after(+cc+););动态生成HTML之后,我们需要将数据提交到数据库中,数据分两类,一类是原有的(数据库读出来的),一类是新加的,根据这种情况分成两类数据提交,因为原有的数据Input标签的name是从数据库读出来的(赋予其name为name*),而新的却不是这样(赋予其name为newname*),根据这个的不同,来识别数据是新的还是原有的。关键代码如下:/* 获取新添加的分类信息 */$neworder = $this-input-post(neworder);

33、$newname = $this-input-post(newname);/* 更新原有的信息 */$order = $this-input-post(order);$name = $this-input-post(name);然后根据提交的值做出相应的处理,提交或更新到数据库分类信息的删除过程:先删除当前分类,然后删除分类下的文章(同时删除文章下的附件),之后删除分类的子类,这样循环下去就可以删除干净了,关键代码:function del_sort()$sid = $this-uri-segment(3,0);if($sid != 0)if($this-msort-del_sort($sid

34、) = TRUE)/获取分类下属文章$sart = $this-marticle-get_sort_article($sid);foreach($sart as $value)$this-delupload($valueaid);/单独定义一个删除附件的函数,方便调用if($this-marticle-del_sort_article($sid) = TRUE)/判断是否删除成功function delupload($aid)/附件删除函数/删除文章下的附件(图片,动画)$paths = $this-msys-get_one_sys(site_uploads);/上传路径$upload_pat

35、h = $pathssys_value;$imgresult = $this-mimages-get_images($aid);/获取要删除的对象if($imgresult = TRUE)foreach($imgresult as $value)$file = ./.$upload_path./.$valuename;/删除文件位置unlink($file);$this-mimages-del_images($aid);/删除数据库中的信息6.3.2、分类属性编辑(图6.3.2)可以设置分类是否支持投稿、是否隐藏栏目、分类类型及浏览权限等,关键代码:function edit_sort()$s

36、id = $this-uri-segment(3,0);/分类ID$newsid = $this-input-post(sid);if($sid != 0)$query = $this-msort-get_one_sort($sid);/获取分类信息$dataonesort = $query0;if(isset($_POSTsubmit)/添加、更新分类信息$array = array(sort_type = $this-input-post(type),sort_contribute = $this-input-post(contribute),sort_hidden = $this-inp

37、ut-post(hidden),sort_competence = $this-input-post(competence),sort_tag = $this-input-post(tag);$query = $this-msort-up_sort($array, $newsid);else$this-load-view(sort_edit, $data);6.4、文章管理图:文章列表(6.4.1)图:文章添加(6.4.2)6.4.1、文章添加、编辑在文章添加这块儿,文章的添加和编辑属于同一个模板,为方便判断用户当前属于那种模式,在HTML中,我添加了一个隐藏域input type=hidde

38、n name=edit value= /,如果有值的话,属于编辑状态,反之为添加状态,关键代码如下:function art_add()$aid = $this-uri-segment(3,0);$datasortlist = $this-msort-get_all();if($aid != 0)/如果获取到aid,说明属于编辑模式$query = $this-marticle-get_one($aid);/读取当前要编辑的文章$dataonearticle = $query0;else/防止错误$dataonearticle = array(aid=,title=,sort_id=,sour

39、ce= ,author=,key=,content=);if(isset($_POSTsubmit)if($_POSTedit != )/更新模式$array = array(title=$this-input-post(title),sort_id=$this-input-post(sort_id),source= $this-input-post(source),author=$this-input-post(author),key=$this-input-post(key),content=$this-input-post(content),update=time();$query = $this-marticle-up_article($_POSTedit, $array);$imagesname = $_POSTimagesname;/获取媒体信息if(isset($imagesname)/媒体信息加入数据库$newimages = explode(,$imagesname);$n = count($newimages);for($i=0;$i$n;$i+)$imgar

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号