PHP头条
热点:

基于PHP和MVC技术架构的精品课程网站管理系统(含源文件).doc,mvc精品课程



获取本设计资料源文件,联系Q:1225467431,指导毕设,课设


摘 要
摘 要
精品课程建设是高校教学建设和教学改革工程的重要组成部分,是提高教学质量的关键环节和重要举措。精品课程网站则是精品课程建设和评价的窗口,是精品课程资源发布与共享的主要途径,在精品课程建设过程中起着至关重要的作用。
网站开发的工具较多,所采用的技术也多种多样。利用它们能够设计出高品质的网页、开发出功能强大的网站,但其对网站制作专业技术的要求非常高,一般的教师难以使用。因此,目前精品课程网站的建设一般都是由教师提供素材和资料,委托一些IT专业人士或公司进行开发。但这种方式存在着许多问题,如开发周期长、费用开销大、课程网站的修改和维护难以保障等。
针对精品课程网站建设的重要性和复杂性,本文提出了一个通用的精品课程网站管理系统的设计方案,并详细介绍、分析了系统的主要功能和实现技术。将该系统应用到软件学院ASP.net精品课程”的建设中,实践表明,采用PHP和MVC技术,通过完善、易用的模板-代码分离的方式,能够简化网站开发过程,使得非专业人员能在较短的时间内制作出满意的课程网站。
关键字:精品课程,PHP,MVC,网站管理系统
Abstract
Being one of important contents of college teaehing constraction and teaching reform project, elaborate course constrction is the key segment and important act to promote teaching quality. Elaborate courses website is thereby the windows of elaborate course constrction and comment. It is a main means to issue and share elaborate course resources and plays an important role in the process of elaborate courses constrction.
There are many website development tools and there are also a variety of technology. Using them we can design a high-quality web pages, and develop a powerful website, but the requirements of professional and technical production is very strict highly, most teachers generally feel difficulty to use. Therefore, at present, the elaborate course constrction websites are generally provided information material by teachers, and commissioned to some IT professionals or company to develop. But in this way, there are many issues, such as long development cycle, the cost of overhead, the difficult protection of curriculum modification or maintenance, and so on.
In view of the importance and complexity of building on the elaborate course website, the paper focuses on the design proposal of the common website content management system on the elaborate course, and introduces and analyzes the main function and the implementation chnology in detail . Finally , it isapplied in the building on ASP.net elaborate course website of JXNUSS . The practice indicated that the system cansimplify the website construction process and make curriculum website in a shorter time for the mon-spe-cialist by using the way of using PHP and MVC technology.
Keywords: elaborate course,PHP,MVC,Website Management System
目 录
TOC 1-3 第1章 绪论 1
1.1 引言 1
1.2 文本的组织 2
1.3 本人做的主要工作 2
第2章 系统开发相关技术概述 3
2.1 PHP语言简介 3
2.1.1 PHP简介 3
2.1.2 PHP的发展趋势 3
2.2 MYSQL数据库简介 4
2.3 MVC模式 5
2.4 PHP开发框架 6
2.5 ThinkPHP介绍 7
2.6 Zend Studio IDE介绍 7
第3章 系统的分析与设计 8
3.1 系统的实现目标 8
3.2 用户的特点 9
3.3 系统分析 9
3.4 网站业务用例 10
3.4.1 信息浏览模块用例 10
3.4.2 课程资源模块用例 11
3.4.5 网站管理员用例 11
3.5 系统数据库设计 12
第4章 系统关键模块的实现 20
4.1 整体架构 20
4.1.1 架构模式 20
4.1.2 目录结构 21
4.2系统入口及执行过程设计及实现 21
4.2.1 系统执行过程设计 21
4.2.2 系统执行过程实现 22
4.3模版引擎设计与使用 23
4.3.1 模板引擎概述 23
4.3.2 模板引擎设计方案 24
4.3.3 模板引擎的使用 26
4.4 连接数据库 28
4.5 CRUD的设计及实现(以内容模块的CRUD为例) 29
4.5.1 CRUD设计思路 29
4.5.2 CRUD实现及实例 30
第5章 总结 33
5.1 系统总结 33
5.2 个人总结 33
参考文献 34
致 谢 36
第1章 绪论
1.1 引言
随着网络技术,特别是Internet技术的发展和普及,网络教学已成为目前网络应用的一个重要方向。国家教育部根据当前的教育形势,适时提出了以建设精品课程”为主要内容的质量工程。利用现代化的计算机网络技术和多媒体技术手段将精品课程上网并免费开放,以实现优质教学资源共享,提高高等学校教学质量和人才培养质量。我国各高校都非常重视精品课程建设,均将其列为大学教学质量和教学改革工程的重要组成部分。
在精品课程建设过程中,利用计算机网络技术建设精品课程网站是一个非常重要的环节。目前,各高校都非常重视精品课程建设,均将其列为大学教学质量与教学改革工程的重要组成部分,通过遴选一些有代表性的课程,集中全校的力量进行重点建设,在课程建设中起到龙头和示范指导作用,从而带动学校教学水平的整体提高。
由于精品课程建设在大部分院校还处于发展阶段,部分院校还处于起步阶段,各种开发平台和支撑系统还不完善。精品课程建设工作一般都是采取独立开发模式,相互之间的内容、风格、形式各方面存在较大差异。从现有国家精品课程网站建设的具体做法,可归纳为两种模式:一是静态网站模式;二是网络教学平台模式,在应用过程中,前者所占比重较大。利用静态网页工具也能够设计出高品质的网页、开发出功能强大的网站,但其对网站制作专业技术的要求仍较高,一般的教师难以使用。通常都是由教师提供素材和资料,委托一些IT专业人士或公司进行开发。但这种方式存在着许多问题,如开发周期长,费用开销大,课程网站的修改和维护难以保障等。
目前,有些高校自行研制开发了一些精品课程的支持平台和辅助系统,如网络教学平台”、网络教学系统”、教务信息管理系统”和网上备课系统”等,还有一些大型的通用的精品课程开发系统,如现在使用较广泛的由南京易学教育软件有限公司开发的天空教室V3.0”。但该系统本质上是基于ASP技术,因此在跨平台方面欠佳,移植性差,只能运行在Windows系统。其它基于ASP.net及JSP技术开发的精品课程网站系统,因为其开发周期长、难度大,部署成本高,也难以在广大高校及高校教师中普及。
PHP凭借其良好的平台兼容性和易用性等优势逐渐成为一种主流的Web开发语言。PHP直观、易于上手,而且是开放源代码,因此很快成为在中小型Web应用开发的首选。据统计,至2008年,在全球己有超过8000万站点使用PHP,这包括Google、雅虎等老牌互联网公司,也包括Youtube、Facebook、Fliekr、digg等新兴网站,在国内,百度、腾讯、新浪、搜狐、TOM等知名互联网公司均是PHP技术的应用者。中小企业使用PHP的更是不计其数。PHP的免费、开源,加上简单和方便应用,必然会导致其在中小型应用中越来越走红。
传统的PHP是一种服务器端的内嵌html式的脚本编程语言,按照内嵌html方式来编写网站程序的话,代码会变得庞大而不可控制。而WEB界流行的MVC模式,能够很好地实现界面和程序的分离,使得不怎么熟悉PHP编程的人也能快速方便地完成网站的制作。MVC模式的引入,能够降低PHP在开发Web应用程序时的难度,提高PHP的Web应用程序的开发效率、可靠性、可维护性和可扩展性。
本系统的研制工作正是以PHP及MVC技术架构一个精品课程网站平台,使得一般的教师均容易上手 ,在较短的时间内制作出满意的精品课程网站。简化开发过程,缩短开发周期,节省开发成本,提高开发效率。
1.2 文本的组织
论文主要介绍了基于PHP和MVC技术架构的精品课程网站管理系统”开发的分析过程、设计思想和功能实现,并详细阐述了系统中关键技术的实现。
第一章简述了系统的开发背景、开发意义以及本人的主要工作。
第二章简述了系统开发的相关技术。
第三章阐述了系统开发的分析和设计过程,包括系统的数据流分析、数据库设计等。
第四章详细描述了本人在系统中实现所使用的关键技术。
1.3 本人做的主要工作
在本系统的开发过程中,本人独立完成了从需求分析、概要设计、数据库设计到系统功能划分及最终实现的一系列工作。
第2章 系统开发相关技术概述
2.1 PHP语言简介
2.1.1 PHP简介
PHP(PHP:Hypertext Preprocessor,超文本预处理器),是一种脚本编程语言,主要用于编写服务端脚本、命令行脚本和客户端的GUI应用程序(桌面应用程序)。
PHP还遵循开放源码协议,对于使用者来说,没有购买许可证或限制使用的问题。PHP开发人员可以从网上或其他的地方下载PHP源代码,可以进行相应的修改和完善,还可以快速地使用PHP来制作小型的个人网站,或者运营大型的电子商务网站等。
它的语法混合了C、Java和Perl的优点及自身的新语法,能够被应用在所有的主流操作系统上,主要包括Linux、Unix、Microsoft Windows等,并支持绝大多数的Web服务器,例如Apache、Microsoft IIS、Personal等,具有简单、安全、高性能、可移植等特点。
2004年7月,PHP5正式版本的发布,标志着一个全新的PHP时代的到来。它的核心是第二代Zend引擎,并引入了对全新的PECL模块的支持。PHP5的最大特点是引入了面向对象的全部机制,并且保留了向下的兼容性。使用PHP5引进了类型提示和异常处理机制,能更有效的处理和避免错误的发生。
近几年来,PHP凭借其简单易学,极好的平台兼容性,很好的运行速度,极其强大的数据库支持,先进的扩展功能,源代码免费公开等优势获得了突飞猛进的发展,在中小型应用中将越来越走红。
2.1.2 PHP的发展趋势
PHP作为最成熟的开源体系LAMP(Linux,Apache,MySQL,PHP)的重要一员,以其简单性、开放性、低成本、安全性和适用性,受到越来越多的Web程序员的欢迎和喜爱。
PHP中提供了作为编码语言所有的基本功能。此外,它还提供许多实用的功能,使得PHP比其他编程语言更适合动态网页的开发。针对企业级Web应用,PHP也不断地完善和增加新的功能。
PHP是源码开放的,这意味着其代码的核心部分可以被免费使用。所有源码、文档可以在PHP官方网站www.php.net上获得。用户可以自由复制、编译、分发其拷贝。任何一个用PHP编写的程序都属于用户自己,并且可以自行处理。
正式由于这种开源精神,才使PHP社区可以聚集众多的爱好者,也使得PHP有如此迅猛的发展。PHP的更新速度,以及发现和修正错误的速度是非常迅速的。可以看到,几乎每周都有一个新版本的PHP程序包发布。
目前,PHP的官方维护者和推动者Zend公司已经加快了PHP企业级应用的步伐。随着PHP5的应用不断扩大,Zend公司还将推出一个标准的PHP开发框架Zend Framework。通过这一框架,PHP开发者可以快速地构建Web应用。
如同ASP具有Windows自己的开发平台一样,Zend也为PHP设计了全新的开发环境Zend Studio。这是一款集程序调试、系统发布以及开发环境为一体的PHP开发软件。这将大大简化PHP开发过程,并且缩短相应的测试周期。另外,Zend还将与IBM公司合作推出集成Zend IDE特性的Eclipse软件供大家使用。
PHP还具有优秀的平台兼容性。PHP源于UNIX系统平台,尤其是PHP、MySQL、Apache和Linux组合,备受PHP爱好者的欢迎。不仅如此,PHP在Windows系列操作系统上也有出色的表现。其良好的程序界面、语言易用性等特点吸引了微软的开发人员。目前,有消息称未来的Windows.NET开发环境将集成PHP,这也意味着PHP的用户群将日益壮大。
随着PHP5版本性能的提升,以及面向对象功能的完善,PHP也逐渐开始于面向企业级应用。PHP的发展前景将无限广阔。
2.2 MYSQL数据库简介
MySQL (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=MySQL _blank​)是完全网络化的跨平台关系型数据库 (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=数据库 _blank​)系统,一个真正的多用户、多线程SQL数据库 (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=数据库 _blank​)服务器 (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=服务器 _blank​),同时是具有客户机/服务器 (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=服务器 _blank​)体系结构的分布式数据库 (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=数据库 _blank​)管理系统.它具有功能强、使用简便、管理方便、容易使用、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=MySQL _blank​) 数据库 (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=数据库 _blank​)的程序.除了支持标准的ANSI SQL语句,它还支持多种平台:在Unix系统上该软件 (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=软件 _blank​)支持多线程运行方式;在Windows NT系统上以系统服务方式运行;在Windows 95/98系统上以普通进程方式运行,Mysql是属于开放源代码软件 (​http:​/​​/​www.baidu.com​/​baidu?tn=sayyes&word=软件 _blank​)。
与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
2.3 MVC模式
MVC(Model-View-Controller,模型—视图—控制器模式)是一种将应用程序的逻辑层和表现层进行分离的设计模式,它强制性的使应用程序的输入、处理和输出分开。
MVC 由 Trygve Reenskaug 提出,最早被应用在 SmallTalk-80 环境中。模型—视图—控制器模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外此模式通过对复杂度的简化使程序结构更加直观。使用MVC应用程序被分成三个核心部件:模型(Model),视图(View)和控制器(Controller),它们各自处理自己的任务。
图2.1 MVC模式
模型(Model):用于封装与业务逻辑有关的代码和数据。例如对精品课程信息模型、用户模型分别封装对精品课程信息和用户的数据和业务逻辑。
视图(View):用于呈现内容给用户(也就是将程序运行的结果返回给浏览器显示)。例如精品课程信息列表页面、后台登录页面。
控制器(Controller):用于接收用户输入(通过浏览器发起的请求),然后调用模型(Model)对输入数据进行处理并获得处理结果。最后将结果传递到视图(View),从而让用户能够看到自己操作的结果。例如用户点击删除信息按钮后,控制器调用操作信息的模型,删除掉指定信息内容,最后通过视图显示成功删除信息的提示信息。
MVC 模式最大的作用就是分离逻辑和表现。一个业务逻辑在模型中实现,而处理结果在视图中呈现。控制器则充当中间人,根据用户请求调用模型,然后把处理结果传递给视图。这种分离的好处有:
(1)清晰的将应用程序分隔为独立的部分;
(2)业务逻辑代码能够很方便的在多处重复使用;
(3)方便开发人员分工协作;
(4)可以方便开发人员对应用程序各个部分的代码进行测试。
2.4 PHP开发框架
随着Web应用需求的快速增长,Web应用程序的开发速度已经无法满足急剧膨胀的Web应用需求。因此,为了满足人们在Web应用程序的开发效率、可靠性、可维护性和可扩展性方面提出的更高的需求,Web应用程序开发人员开始在程序开发中引入框架这一复用机制,用来提高Web应用程序的开发效率,并保证程序的质量。
框架指的是人们根据开发的一些共性,对于一定的应用开发,抽象出一套相对合理有效的开发技术和方法,并研究提供与之相配合的开发工具。例如:设计出一套结构合理、功能全面的API,或者开发出一套根据模板自动化创建网站的工具,甚至定义出一套描述应用服务的语言,再加上与之相配合的开发方法,这些都可以称为框架。
PHP开发框架(PHP Development Framework),就是一种针对PHP开发的框架。它能够简化和加速PHP的开发,还可以为程序代码及文件增加结构,从而促使PHP开发人员编出更易读、更易理解的和更易维护的代码。最终,PHP开发人员借助于框架也就可以更有效地开发PHP程序和项目。
2.5 ThinkPHP介绍
ThinkPHP是一个开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,单一入口模式等,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现,也已经越来越多地受到国内PHP开发人员的认可。
使用ThinkPHP,可以更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单、兼容和快速的特性中受益。简洁、快速和实用是ThinkPHP发展秉承的宗旨,为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应用开发的最佳实践!
作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注业务逻辑。
2.6 Zend Studio IDE介绍
Zend Studio是唯一的一个在PHP程序开发的全过程中都可使用的专业集成开发环境(IDE)。Zend Studio 提供了PHP代码编辑、调试,分析、优化和数据库的全套工具,Zend Studio同时可以缩短PHP程序的开发周期并且简化项目。Zend Studio特点:
 加速其开发过程;
 发布高度可信赖的应用软件;
 简化了网络数据库应用程序的开发,并提供了查询的性能;
 便捷的团队开发和团队合作监测你的应用程序,包括在一个配置环境中的代码行为和性能问题;
 自定义用户开发环境,增强的弹性机制;
 平衡已有的技术投资。
第3章 系统的分析与设计
3.1 系统的实现目标
本系统的目标是采用PHP和MVC技术,通过完善、易用的模板-代码分离的方式,建立一个通用的精品课程网站框架,使得非专业人员能在较短的时间内制作出满意的课程网站,简化网站建设过程,降低网站建设门槛。具体要求如下:
1. 网站应包含如精品课程描述、教学内容、教学方法与手段、教师队伍、教学成果、课程资源、教学问答等栏目,同时栏目应可定制,方便扩展;
2. 网站应包含完善的信息管理、信息发布的内容管理功能,用户可以随时方便地提交需要发布的信息而无须掌握复杂的技术;
3. 网站应为学生提供一些重要的、常用的学习资源、教育资源的共享,教师可方便地上传学习及教育资源;
4. 网站应为学生提供在线答疑平台,方便教师与同学的交流;
5. 网站应为不同用户提供不同的操作权限,实行严格的认证与授权机制。
6. 网站应实现灵活的模板架构,通过将模板和代码相分离,使得教师能在较短的时间内用简单的方法制作出符合其要求的界面。
7. 网站应能应付高负载的访问,在数据访问层、业务逻辑层和模板层之上设计良好的缓存策略。
8. 网站应符合SEO(search engine friendly,搜索引擎友好)设计,通过URL REWRITE转向及基于PATH_INFO 的参数解析使得动态网页在链接(URI)形式上更像静态的目录结构,使网站内容更易于被搜索引擎收录。
参照各模块的功能与具体的特点,在架构整个网站应达到以下设计目标:
1. 稳定性:整个网站应能稳定运行,硬件配置的局部改变不会影响整体的正常运行,其它网站的差错不会导致网站无法正确运作;
2. 准确性:网站管理员按操作指南操作产生的权限数据,和所有前台用户的操作与数据库原定产生变化的实际状态应严格保持一致,杜绝错误记录、数据错位等情况的出现;
3. 开放性:网站基于PHP平台架构,可工作于多操作网站平台之上,在硬件保证兼容的基础上,网站应尽量实现平台无关性,保证网站在不同操作网站环境下的处理能力;
4. 可扩展性:如果需增加新的功能模块,再次开发不需更改原有网站的源代码,原有网站对扩展的部分一般不具有依赖性;
5. 可维护性:界面风格或其它可能的参数化改变(如增加新功能等)不需要重新编写源代码,可以方便进行二次开发;
6. 独立性:每一个功能模块尽量独立,减少与其它模块之间的耦合性,尽可能做到按客户的需求可以选择安装哪些模块,不安装哪些模块;
7. 易使用性:网站的界面与操作人员的交互性好,与主机间使用Browser/Server(浏览器/服务器)结构;
8. 先进性:在保证稳定的前提下,尽量使用国际上流行的技术与概念,使网站能够紧跟技术发展的脚步,不至于陈旧过时。
3.2 用户的特点
本网站的设计初衷是建立一个简单、易用、高效的通用精品课程网站框架,因此该系统的用户是针对各个高校的教师及学生,用户具有一定的计算机网络基础,但不一定对网页设计及网络编程有较深的认识。
3.3 系统分析
通过对网站的分析和研究,网站分为以下功能模块:系统管理、用户管理、内容管理、资源管理、公告管理、单页管理、留言管理、链接管理、模板管理、系统登录等,如图3.1所示:
图3.1 系统总体功能模块图
3.4 网站业务用例
3.4.1 信息浏览模块用例
任何用户均可查看本课程的课程描述、教学内容、教学方法与手段、教师队伍、教学成果、课程资源等栏目的详细信息,如图3.2所示:
图3.2信息浏览用例图
用例说明:
 课程描述:任何用户均可在此了解精品课程的描述信息;
 教学内容:任何用户均可在此了解精品课程的教学内容;
 教学方法与手段:任何用户均可在此了解精品课程的描述方法与手段;
 教师队伍:任何用户均可在此了解精品课程的教师队伍信息;
 教学成果:任何用户均可在此了解精品课程的教学成果信息;
 发表评论:用户可在此发表对以上各栏目信息的评论。
3.4.2 课程资源模块用例
用户可以查看本课程的课程资源信息、下载资源、发表评论等,如图3.3所示:
图3.3课程资源模块用例图
用例说明:
 课程资源:用户可查看本课程的课程资源信息;
 资源下载:用户可下载课程资源;
 发表评论:用户可对课程资源发表留言和评论。
 课程特色:学生或者老师可以在此了解本课程的课程资讯信息。
3.4.3 网站管理员用例
管理员可以查看管理网站的各个模块、以及权限管理、系统基本设置,如图3.4所示:
用例说明:
 课程介绍管理:管理员可以在此管理课程介绍的信息;
 教学队伍管理:管理员可以在此管理教学队伍的信息;
 教学内容管理:管理员可以在此管理教学内容的信息;
 教学方法与手段管理:管理员可以在此管理教学方法与手段的信息;
 教学条件管理:管理员可以在此管理教学条件的信息;
 教学效果管理:管理员可以在此管理教学效果的信息;
 课程特色管理:管理员可以在此管理课程特色的信息;
 课程设计管理:管理员可以在此管理课程设计的信息;
 网络课程管理:管理员可以在此管理网络课程的信息;
 权限管理:管理员可以在此管理用户、角色、以及权限的信息。
图3.4网站管理中心用例图
3.5 系统数据库设计
系统E-R图如图3.5所示:
图3.5系统E-R图
E-R图转换为关系模型:
1、通知通告表,用于保存网站发布的通知信息,如表3.6所示:
表3.6通知通告表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 通知标题 title varchar(50) Y
3 通知内容 content text Y
4 添加者 username varchar(50) Y
5 通知来源 comefrom varchar(50)
6 链接地址 link varchar(50)
7 点击次数 hits int(11)
8 发布时间 postdate int(11) Y
2、内容管理表,用于保存网站各栏目发布的信息,如表3.7所示:
表3.7内容管理表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 用户ID uid int(11) Y
3 信息标题 subject varchar(255) Y
4 标题颜色 color varchar(7)
5 添加者 username varchar(50) Y
6 信息来源 comefrom varchar(50)
7 发布时间 postdate int(11) Y
8 年份 yeard char(4)
9 月份 monthd char(2)
10 浏览点击数 hits int(11)
11 类别编号 cid int(11) Y
12 是否审核 ischecked tinyint(4)
13 是否置顶 istop tinyint(4)
14 是否图片信息 ispic tinyint(1)
15 是否推荐 isgood tinyint(1)
16 链接地址 link varchar(100)
17 内容摘要 message text
18 信息内容 content mediumtext Y
19 附件 attachment varchar(50)
20 附件地址 attachpath varchar(50)
21 缩略图 attachthumb varchar(50)
3、内容类别表,用于保存网站内容模块类别信息的记录信息,如表3.8所示:
表3.8内容类别表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 模型编号 module tinyint(1) Y
3 父级目录编号 parentid smallint(6) Y
4 分类名 title varchar(50) Y
5 SEO关键字 keywords varchar(255)
6 SEO描述 description varchar(255)
7 状态 status tinyint(1) Y
8 允许添加的组 allowadd varchar(50)
9 允许修改的组 allowedit varchar(50)
10 允许删除的组 allowdel varchar(50)
11 信息统计 tnum mediumint(8)
12 评论统计 cnum int(10)
13 排序 displayorder mediumint(8)
4、内容评论表,用于保存用户对发布信息进行评论的信息,如表3.9所示:
表3.9内容评论表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 所属信息ID tid int(11) Y
3 评论者 username varchar(20) Y
4 IP地址 ip char(15)
5 评论内容 content text Y
6 是否已审 ischecked tinyint(1)
7 评论时间 postdate int(11) Y
5、留言信息表,用于保存用户留言信息,如表3.10所示:
表3.10留言信息表表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 留言类型 type varchar(50)
3 留言者 username varchar(50) Y
4 性别 sex tinyint(4)
5 联系电话 tel varchar(50)
6 QQ号码 qq varchar(50)
7 E-mail email varchar(50)
8 留言者地址 address varchar(50)
9 留言内容 content text
10 回复内容 reply text
11 是否已审 ischecked smallint(1)
12 回复时间 replydate int(11)
13 留言时间 postdate int(11) Y
14 IP地址 ip varchar(50)
6、友情链接表,用于保存网站友情链接,如表3.11所示:
表3.11友情链接表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 链接类型 types varchar(50) Y
3 链接标题 title varchar(50) Y
4 链接地址 url varchar(100) Y
5 Logo路径 logo varchar(50)
6 网站介绍 intro text
7 发布时间 postdate int(11) Y
8 是否已审 ischecked tinyint(1)
9 排序 orders smallint(6)
7、系统信息设置表,用于保存系统信息设置,如表3.12所示:
表3.12系统信息设置表
序号 字段标题 字段名称 数据类型 必填
1 信息设置属性名 title varchar(20) Y
2 信息设置属性值 values text
8、用户表,用于保存系统使用用户的数据信息,如表3.13所示:
表3.13用户表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 用户名 username varchar(50) Y
3 密码 password varchar(50) Y
4 密码保护问题 question varchar(50)
5 密码保护回答 answer varchar(50)
6 所属组编号 groupid tinyint(2) Y
7 注册时间 regtime int(11)
8 上次登录时间 lastlogintime int(11)
9 登录次数 logintimes int(11)
10 是否已审 ischecked tinyint(1)
11 真实姓名 realname varchar(50)
12 性别 sex tinyint(4)
13 电话 telphone varchar(50)
14 E-mail email varchar(50)
15 地址 address varchar(100)
9、单页内容表,用于系统单页信息数据的保存,如表3.14所示:
表3.14单页内容表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 单页标题 subject varchar(100) Y
3 SEO网站标题 seotitle varchar(250)
4 SEO网站关键字 seokeywords varchar(250)
5 SEO网站描述 seodescription varchar(250)
6 摘要备注 message text
7 单页内容 content text Y
8 发布时间 postdate int(11)
10、课程资源表,用于记录网站中所有可以使用的精品课程的资源信息,如表3.15所示:
表3.15课程资源表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 用户编号 userid int(11) Y
3 分类编号 cid int(11) Y
4 资源名称 subject varchar(50) Y
5 资源编号 spec varchar(50) Y
6 资源大小 size varchar(50)
7 关键字 keywords varchar(50)
8 资源说明 content text Y
9 摘要说明 meno text
10 附件 attachment varchar(50)
11 附件缩略图 attachthumb varchar(50)
12 是否已审 ischecked tinyint(1)
13 是否置顶 istop tinyint(1)
14 是否推荐 isgood tinyint(1)
15 点击浏览数 hits int(11)
16 发布时间 postdate int(11) Y
11、用户组表,用于保存网站中用户分组的数据信息,如表3.16所示:
表3.16资源表
序号 字段标题 字段名称 数据类型 必填
1 ID id 自动编号 Y
2 用户组名称 grouptitle varchar(20) Y
3 系统配置权限 allowsystem tinyint(1)
4 链接管理权限 allowlink tinyint(1)
5 数据库管理权限 allowdatabase tinyint(1)
6 单页管理权限 allowpages tinyint(1)
7 内容管理权限 allowarticle tinyint(1)
8 资源管理权限 allowproduct tinyint(1)
9 类别管理权限 allowcategory tinyint(1)
10 留言管理权限 allowfeedback tinyint(1)
11 通告管理权限 allowannounce tinyint(1)
12 会员管理权限 allowmember tinyint(1)
13 会员组管理权限 allowgroup tinyint(1)
第4章 系统关键模块的实现
4.1 整体架构
4.1.1 架构模式
面向对象是本系统的实现基调,除了个别必须的公共方法之外(比较频繁使用的方法,为了调用简单考虑),系统的全部文件都采用类的形式实现,为以后的维护和扩展带来了方便。整个应用系统采用单一入口方式访问,其它组件和类库被有效的封装到一个安全的地方,甚至无法通过 WEB 浏览器访问到,只有入口程序和模板文件在WEB目录下面。由于采用面向对象的开发方式,因此系统的可维护性、可扩展性和可移植性方面表现良好。
为实现模板-代码的分离,系统采用MVC 模式。应用控制器(核心控制器)和 Action 控制器都承担了控制器的角色,不同Action的业务逻辑的调用由应用控制器来负责。模型的定义由Model类来完成。系统的视图(模板)的实现与代码无关的, 实现100%分离,可以独立预览和制作。
在DAO模式的基础上,系统引入ActiveRecord 模式,并对其做了增强,除了可以作为数据对象之外,还可作为数据集对象。系统采用了非标准的 ORM 模型:表映射到类,记录(集)映射到对象,字段属性映射到对象的虚拟属性,拥有领域对象的领域属性、领域方法和持久性方法,实现了ActiveRecords 模式的ORM模型,从而达到敏捷开发的目的。系统架构模式如涂4.1所示:
图4.1 系统体系结构
4.1.2 目录结构
┎━JxnuECMS_App 项目目录
┃ ┝ index.php 项目入口文件
┃ ┝ Cache 模版缓存目录
┃ ┝ Common 公共文件目录
┃ ┝ Conf 项目配置目录
┃ ┝ Data 项目数据目录
┃ ┝ Html 静态文件目录
┃ ┝ Tpl 模版文件目录
┃ ┝ Logs 日志文件目录
┃ ┝ Temp 数据缓存目录
┃ ┝ Uploads 上传文件目录
┃ ┗ Lib 应用类库目录
┃ ┝ Action 控制器(模块)类目录
┃ ┝Model Model 类文件目录
┃ ┝ Exception异常类库目录
┃ ┝ Common 公共应用类目录
┃ ┗ Help 助手类目录
┝━Public 网站公共目录(公用)
┃ ┝ Js JS 类库目录
┃ ┝ Images 公共图像目录
┃ ┗ Uploads 公共上传目录
┗━ThinkPHP 框架系统目录
4.2系统入口及执行过程设计及实现
4.2.1 系统执行过程设计
系统采用模块和操作的方式来执行。首先,用户的请求会通过入口文件生成一个应用实例,应用控制器(我们称之为核心控制器)会管理整个用户执行的过程,并负责模块的调度和操作的执行,并且在最后销毁该应用实例。任何一个WEB行为都可以认为是一个模块的某个操作,而模块的概念在系统中的体现就是Action类,类似于控制器的概念,而具体的操作就是Action类中的某个公共的方法。
4.2.2 系统执行过程实现
用户的第一次URL访问
http:///JxnuECMS_App/index.php/Index/show/
所执行的流程进行详细的分析,用户的URL访问首先是定位到了JxnuECMS_App项目的index.php 入口文件,项目的入口文件所做的其实是加载系统的公共入口文件ThinkPHP.php,之后实例化JxnuECMS_App应用实例,完成JxnuECMS_App初始化。
define(THINK_PATH, ./ThinkPHP); // 定义ThinkPHP框架路径
define(APP_NAME, JxnuECMS_App); // 定义项目名称
define(APP_PATH, ./JxnuECMS_App);// 定义项目路径
require(THINK_PATH./ThinkPHP.php); // 加载框架入口文件
$App = new App(); //实例化一个网站应用实例
$App->run();//应用程序初始化
?>
之后项目预编译,依次加载系统惯例配置文件convention.php、项目配置文件 config.php、项目公共文件 common.php,如果是调试模式加载系统调试配置文件 debug.php,如果定义了项目的调试配置文件则载入 debug.php。之后生成项目编译缓存文件~app.php。
接下来系统会根据当前的URL来分析要执行的模块和操作。这个分析工作由URL调度器Dispatcher来完成该调度。在Dispatcher调度器中,会根据
http:///appName/moduleName/actionName/params
获取当前需要执行的项目(appName)、模块(moduleName)和操作(actionName)。
每个模块名称是一个Action文件,类似于控制器,系统会自动寻找项目类库Action目录下面的相关类,如果没有找到,会尝试搜索应用目录下面的组件类中包含的模块类,如果依然没有,则会判断是否存在空模块(EmpatyAction),否则抛出异常。
而actionName操作是首先判断是否存在Action类的公共方法,如果不存在则会继续寻找父类中的方法,如果依然不存在,就会判断是否存在空操作(_empty),然后就会寻找是否存在自动匹配的模版文件。如果存在模版文件,那么就直接渲染模版输出,否则将抛出异常。
因此应用开发中的一个重要过程就是给不同的模块定义具体的操作。一个应用如果不需要和数据库交互的时候可以不需要定义模型类,但是必须定义Action控制器。
Action控制器的定义非常简单,继承Action基础类即可:
Class UserAction extends Action{
}
Action基础类中默认定义了很多常用的操作方法。例如,我们可以执行(如果已经存在对应模板文件的情况)
http:///index.php/Member/
http:// /index.php/Member/add
如果需要增加或者重新定义自己的操作方法,增加一个方法就可以了,例如:
Class MemberAction extends Action{
Public function select(){// 定义一个select操作方法,方法不需任何参数
// select操作方法的逻辑实现
// ……
$this->display(); // 输出模板页面
}
}
通过执行http://servername/index.php/Member/select/,系统会自动定位当前操作的模板文件,而默认的模板文件应该位于项目目录下面的Tpldefault Member select.html
4.3模版引擎设计与使用
4.3.1 模板引擎概述
模板引擎被设计出来用于把商业逻辑从数据的表现分离开来。例如,从数据库中获取数据或者计算贸易耗费。模板引擎解决了两个主要问题:一是如何实现这种分离;二是如何从HTML中分离复杂”的PHP代码,这从理论上使得没有PHP经验的HTML设计者能够不看任何PHP代码的条件下修改站点的外观。然而,模板系统也引入了一些复杂性。首先,现在有一个从多个文件得来的页面”。典型的,可能有一个主PHP页负责业务逻辑,一个外面的布局”模板把整个站点的整体布局进行渲染,一个内部的内容特定的模板,一个数据库抽象层,以及模板引擎本身(这些可能是也可能不是由多个文件组成)。也有可能,一些人仅仅简单地在每个PHP页面的首尾处包含头部”和尾部”文件。这产生的单个页面的文件数量是很可观的。然而,因为PHP解析器非常快,用到的文件数量可能不是那么重要,除非站点流量很大。
模板系统引入了另外一个处理的层次。模板文件不仅仅是必须被包含,他们还必须被解析(取决于模板系统,这个行为有很多种方式来完成,使用正则表达式,字符串替换,编译,词法分析,等等)。这就是为什么对模板进行测速变得流行起来:因为模板引擎使用各种方法来解析数据,它们中的一些比另外一些要快。而且,一些模板引擎提供了比其他引擎更加丰富的功能。
简单地说,模板引擎利用了用C写的脚本语言另外一个伪脚本语言(无论模板引擎支持何种标签)(PHP)。在这些嵌入的脚本语言中,。某些提供了简单的变量改写和循环。另外一些则提供了条件和嵌套循环。而其他的,例如smarty提供了一个PHP的比较大的子集的接口,以及一个缓冲层。Smarty的目标是把业务逻辑从表现中分离出来”而不是PHP代码和HTML代码的分离”。这看上去区别不大,但是它正是要点所在。任何模板引擎的最终目标不应该是从HTML移除所有的逻辑。它应该是把表现逻辑从业务逻辑中分离出来。
4.3.2 模板引擎设计方案
系统模板引擎选择采用使用XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用动态编译和缓存技术,同时支持自定义标签库。
模板引擎一般分为解释型模板引擎和编译型模板引擎。解释型模板引擎每次将模板内容读入内存,并通过正则等方式分析字符串后对预置的标签进行替换,每次加载模板都需要重复这个过程,例如tinybutstrong即属于此类型。而编译型模板引擎是在第一次执行模板文件的时候进行一次编译(相当于一次解释分析过程),然后生成一个编译后的缓存文件,下次执行的时候就可以直接执行缓存文件,无需再次编译。所以,在速度上面,编译型模板引擎在第一次运行模板的时候速度会比解释性模板引擎略微缓慢,是因为有严格的编译(包括生成缓存文件)过程,这个过程根据模板引擎的复杂程度和模板页面标签多少速度有所不同,而当第二次执行的时候,因为最耗时的过程已经跳过了,编译型模板引擎的优势就体现出来了。目前大多数的模板引擎都采用编译型,但是,是否为编译型和模板功能并没有直接关系,tinybutstrong虽然是解释型但是功能也相当强大。
本系统也采用编译型模板引擎的设计,具备动态生成缓存文件的能力,无论是模板文件修改或者是缓存文件被删除,系统都会重新生成缓存文件。同时可以设置模板缓存的有效时间,如每隔10分钟重新编译模板文件。并且在编译模板文件的过程中,如果发现存在很多相同的标签,系统并不会重复解析,而是读取解析缓存。因此,无论在解析还是执行上面,效率都是比较高的。
模板引擎的运作过程如图4.2所示:
图4.2 模板引擎运作过程
模板引擎的一个重要因素是模板标签的功能。Smarty模板引擎以功能以强大而著称,标签的易用性和完善性也是模板引擎的关键因素之一,最基本的功能包括注释、变量输出、条件控制、包含文件,而这些功能的体现都是借助于一系列的模板标签。这一部分是设计模板引擎的关键也是工作量比较大的地方。目前见到的模板引擎标签大致分为特定标签和XML标签两种类型。
特定标签通常是比较常见的类型,由模板引擎自身定义的一系列标签,用来满足变量输出和控制的需要,通常具有私有化规则,标签类型各不相同,在本系统中,我们称之为普通模板标签。例如,Smarty中就是使用 {$varname} 来输出PHP的$varname 变量,TinyButStrong则采用[var.tbl.item1]的方式输出变量,我也曾看到过其它形式的输出标签,例如{:=varname} ,当然有些模板引擎是设计为可以定义起始标签的。本系统的普通模板标签以{”和}”作为开始和结束标识,和Smarty等大多数模板引擎是一致的,也支持起始标签定义,例如可以在项目配置文件中配置成采用 [$varname] 来输出模板变量。
本系统的变量输出也具有Smarty的变量组合调节器的功能,例如{$articleTitle|upper|spacify} 。其中调节器方法可以是系统函数或者自定义函数,还可以设置禁止在模板中使用的函数。也可以支持输出多级对象属性或者数组的输出,例如:{$vo.name.sub} {$array[name][sub]}。
除了输出模板变量之外,模板引擎通常都会提供一个特殊的标签输出方式用来输出一些常量和系统变量,在本系统中采用 $[变量名] 来输出一些无需赋值的特殊或者内建变量,和Smarty的$smarty保留变量类似。
和其他的模板引擎不同,本系统的特定标签仅仅是用于变量输出功能,而把控制功能和复杂的标签功能放到XML模板标签里面。XML模板引擎在Java领域里面是非常常见的,在PHP模板引擎领域似乎并不多见,本系统在实现自身的特定标签外,有效地借鉴了Java的标签库技术,以实现XML模板标签支持,并且允许自定义标签库。两种标签方式的结合使用,可以让模板定义更加灵活。
基于某些兼容性考虑,通常在模板文件中可以直接插入php代码,用来完成模板标签所无法完成或者比较困难的功能。这种方式与标签的互补可以满足绝大多数的模板需要。本系统的模板引擎也设计成支持在模板中直接写php代码。
4.3.3 模板引擎的使用
与著名的模板引擎Smarty的用法类似,本系统模板引擎的使用只需直接创建ThinkTemplate对象后进行模板变量赋值,再进行渲染输出,之后定义模板标签和输出变量。
$tpl = new ThinkTemplate();
$tpl -> assign(vo,$vo);
$tpl -> display(index.htm);
为方便用户使用,在本系统中作了相应简化,无需创建ThinkTemplate对象,Action类会自动创建,只需要赋值并输出即可。
$this->assign(vo,$vo); 
$this->display();
Smarty在渲染模板的时候必须指定模板文件名,在本系统中如果不指定模板文件名,会按照系统设置的规则进行自动定位,例如,当前模块的某个操作可以定位成为以模块名称为目录。
下面的一个操作命名的模板文件。在进行模板变量赋值的时候,可以对任何变量进行赋值,由模板标签来决定输出何种类型的。并且,赋值具有智能化和批量赋值,默认情况下第一个参数是要在模板中输出的变量名称,而第二个参数是变量的值,但是如果没有指定第二个参数,那么会对第一个参数进行判断,如果是索引数组,则自动进行批量赋值。例如:
$tmpl = array();     
$tmpl[var1] = value1; 
$tmpl[var2] = value2; 
$this->assign($tmpl);  
$this->display();
代码会自动赋值两个模板变量var1和var2,用来在模板文件中输出。作为安全性考虑,没有赋值的模板变量是不能用于输出的,但是有些特殊的模板标签可以输出系统的常量和系统变量例外。
Smarty采用插件方法来实现扩展,本系统采用标签库技术,比Smarty提供更为强大的定制功能,和Java的TagLibs一样可以支持自定义标签库和标签,每个XML标签都有独立的解析方法,所以可以根据标签库的定义规则来增加和修改标签解析规则。在ThinkTemplate中标签库的体现是采用XML命名空间的方式,如:

每个命名空间都有一个对应的标签库XML定义文件,并且还包含有一个用于解析该标签库的类文件。系统默认对cx标签库进行支持,所以在定义cx标签库的标签时候,可以省略XML的命名空间前缀。当系统中存在很多的标签库的时候,每次编译都会加载所有的标签库解析文件,这样会造成一种浪费,因为很多情况,我们可能只是使用其中的一个或者二个标签库。所以,我们还必须在模板页面实现标签库引入功能,来告诉模板引擎当前模板页面需要哪些标签库的支持,从而加载需要的解析类。在本系统中,使用tagLib标签来实现这一功能,如:

表示导入html和cx两个标签库的支持。如果没有定义,那么默认只是加载cx标签库。利用标签库的特性,我们可以非常方便地扩展自己需要的标签,ThinkTemplate正是采用这种机制来内置集成了一些常用的HTML组件标签,如:

使用上面的自定义XML标签定义了一个DataGrid组件,省去了复杂的Html代码,在模板第一次执行的时候,模板引擎会把上面的组件标签解析成PHP和Html结合的代码,生成缓存文件。
在模板文件中,变量输出代码格式如下:
{$varname|function1|function2=arg1,arg2,### } //常规输出方式
{$webTitle|md5| strtoupper | substr=0,3}
{$info[name] } //输出数组变量
{$var.key } //输出对象属性变量,也支持函数
{$Think.get.pageNumber}  //输出$_GET变量
{$Think.cookie.name}    //输出$_COOKIE变量
{$Think.MODULE_NAME} //输出系统常量
当页面需要包含公共文件时,模板标签如下:
{include:Filename } // Filename表示公共文件的名称(不包含后缀)
加载公共模板文件后,模板引擎会重新对该页面中的模板标签进行解析,在公共模板中再次包含公共文件,但是不能循环包含。
例如,在header.html文件中包含了menu文件{include:menu },在index.html文件中则包含了header和footer,{include:header }, 这里是首页的内容{include:footer }
在访问index操作方法的时候,模板首先读取index文件,并开始解析include:header,在解析header文件的过程中又遇到include:menu标签,又开始解析,解析完成后再解析include:footer标签,在经过几层的嵌套包含解析后index文件最终被解析成一个缓存模板文件。而且,包含文件可以设置为变量,通过下面方式定义:{include:$include } 其中$include为一个模板变量。
系统使用到的XML标签技术包含了普通模板有的功能,并且有了更多的增强和补充,更重要的一点是新的标签库技术更加具有扩展性。系统模板引擎内置了两个标签库实现:CX和Html。
要在模板页面中使用TagLib标签库功能,需要在开始时候使用taglib 标签导入需要使用的标签,防止以后标签库大量扩展后增加解析工作量,用法如下:

引入标签库后,就可以使用标签库定义的标签来定义模板了,例如:
//可以使用下面的模板标签定义。
      
       
      
                   

为了简化,模板引擎会默认加载CX标签库,并且,默认加载的CX库可以不使用CX命名空间前缀,因此也可直接简化为:

对于多重循环的定义:
    
 
{$sub.name}           
            

混合标签结合使用的例子:
 
{$user.name}
{$use.age}
{$user.email}

对于不太复杂的变量输出,建议多采用{$var} 方式,因为单纯从易用性方面而言,这种方式最简洁,而且功能也比较完善。
4.4 连接数据库
系统内置了抽象数据库访问层,把不同的数据库操作封装起来,需要连接数据库时,只需要使用公共的Db类进行操作,而无需针对不同的数据库写不同的代码和底层实现,Db类会自动调用相应的数据库适配器来处理。目前的数据库包括MySQL、PgSQL、Sqlite和PDO的支持,如果应用需要使用数据库,必须配置数据库连接信息,数据库的配置文件有多种定义方式:
(1)在项目配置文件里面定义:
Return array(
DB_TYPE=>mysql,
DB_HOST=>localhost,
DB_NAME=>jxnuecms,
DB_USER=>root,
DB_PWD=>seamcker,
DB_PORT=>3306,
DB_PREFIX=>jxnuecms_,
// 其他项目配置参数………
);
(2)使用数组传参数:
$DSN = array(
dbms => mysql,
username => username,
password => password,
hostname => localhost,
hostport => 3306,
database => dbname
);
$db = new Db($DSN);
4.5 CRUD的设计及实现(以内容模块的CRUD为例)
4.5.1 CRUD设计思路
Model 类将数据库操作统一为 CURD 和一个 SQL 查询方法,也即:_create  新增 (写入)数据、_update  更新 (保存)数据、_read  读取(查询)数据、_delete  删除数据、_query SQL 查询。其它的所有方法基本上可以通过调用这些基础方法进行操作,我们无需关注这些细节,只需按照系统提供的抽象方法来操作。通过这种灵活和方便的数据操作方法,不仅使系统实现了对数据库操作的四大基本操作(CRUD):创建、读取、更新和删除的实现,还可以扩展其它实用的数据操作方法,提供 ActiveRecords模式的最佳体验。
4.5.2 CRUD实现及实例
1) 新建记录
// 实例化一个User模型对象
$User = new UserModel();
// 然后给数据对象赋值
$User->name = Test;
$User->email = Test@test.com;
// 然后就可以保存新建的User对象了
$User->add();
// 如果需要锁实例化模型对象的时候传入数据,可以使用
$data[name] = Test;
$data[email] = Test@test.com;
$User = new UserModel($data);
$User->add();
// 或者直接在add方法传入要新建的数据
$data[name] = Test;
$data[email] = Test@test.com;
$User = new UserModel();
$User->add($data);
如果主键是自动增长类型,不需要传入主键的值就可以新建数据;如果插入数据成功的话,Add方法的返回值就是最新插入的主键值,可以直接获取。
$insertId        =        $User->add($data);   
一般情况下,应用中的数据对象不太可能通过手动赋值的方式写入,而是有个数据对象的创建过程。系统提供了一个create方法来创建数据对象,然后进行其它的新增或者编辑操作。
$User = D(User);
$User->create(); // 创建User数据对象,默认通过表单提交的数据进行创建
$User->add(); // 新增表单提交的数据
Create方法支持从其它方式创建数据对象,例如,从其它的数据对象,或者数组等。
$data[name] = Test;
$data[email] = Test@test.com;
$User->create($data);
// 从User数据对象创建新的Member数据对象
$Member = D(Member);
$Member->create($User);
支持新增多条记录
$User = new UserModel();
$data[0][name] = Test;
$data[0][email] = test@test.com;
$data[1][name] = SKStudio;
$data[1][email] = SKStudio@gmail.com;
$User->addAll($data);
在MySql数据库下面,会自动使用一条SQL语句实现多数据的插入。
2) 查询记录
读取数据库的记录是数据库操作中的最有意思的一件事情了,写过文本数据库的人都知道,保存和删除数据不难(无非是规范和效率问题),难在可以通过各种方式来查找需要的数据。而在本系统中,因为引入ThinkPHP,数据库的查询操作变得轻而易举,也变得富有内涵。
本系统中单个数据查询和多个数据查询的方法是分开的,必须明确的是,需要返回的是一个数据还是一个数据集,因为对两种类型的返回数据的操作方式是截然不同的。无论何种方式的返回,都可以直接在模型对象里面操作,也可以作为数据传递给需要的变量。
以我们要查询主键为8的某个用户记录为例,实现的方法如下:
$User->find(8);
如果查询成功,查询的结果直接保存在当前的数据对象中,在进行下一次查询操作之前,都可以提取,获取查询的结果数据代码如下:
$name = $User->name;
$email = $User->email;
遍历查询到的数据对象属性
foreach ($User as $key=>$val){
echo($key.:.$val);
}
或者进行相关的数据更改和保存操作,也可以用变量保存下来以便随时使用,代码为:
$user = $User->find(8);
3) 更新记录
$User->find(1); // 查找主键为1的数据
$User->name = SKStudio; // 修改数据对象
$User->logintime = array(exp, logintime +1); // 用户登录次数加1
$User->save(); // 保存当前数据对象
如果不是使用数据对象的方式来保存,可以传入要保存的数据和条件
$data[id] = 1;
$data[name] = SKStudio;
$User->save($data);
4) 删除记录
$User->find(2);
$User->delete(); // 删除查找到的记录
$User->delete(5,6); // 删除主键为5、6的数据
$User->deleteAll(); // 删除查询出来的所有数据
delete方法可以直接传入删除条件,代码如下:
$User->delete(name=SKStudio);
$Map = array();
$Map[id] = array(gt,10);
$User->delete($Map);
第5章 总结
5.1 系统总结
本文中介绍的基于PHP和MVC技术架构的通用精品网站管理系统,以简化和改善精品课程网站的开发为主要目标,使用该网站管理系统,能够有效地提高精品网站的的开发效率、可靠性、可维护性和可扩展性。
本文采用轻便、简洁、易学的PHP语言,结合目前流行的MVC设计模式,遵循ThinkPHP轻量型应用框架的设计和开发。
主要完成了以下工作:
①在阅读和参考大量国内外有关理论和应用资料的基础上,简要地提出目前精品课程网站面临的现状并提出网站架构的简化方法。
②探讨MVC设计模式及MVC模式的原理,并简要叙述了PHP与MVC的结合运用。
③从精品课程网站开发平台的需求出发,提出了一个通用的精品课程网站管理系统的设计方案,并详细介绍、分析了系统的主要功能和实现技术。
由于系统设计使用了较流行的技术及设计模式,采用了开放分层体系结构,使系统具有良好的松散耦合度;本系统具有良好的跨平台性及可扩展可维护性,日后将继续对本系统进行扩充和完善。
5.2 个人总结
在整个毕业设计的项目实施过程中,从需求分析、概要设计、详细设计以及具体实施的所有阶段,时间是非常紧迫的。由于个人工作的原因,并未能按时、保质、高效地完成毕业论文的撰写。在具体实践过程中,能够在非常短的时间内能够快速吸收国内外PHP开发框架方面的知识,这对于提升我的快速学习能力也有很大的帮助。现学现用,根据项目的实际情况合理的选择恰当的技术,对于加快开发效率是很有帮助的。
参考文献
[1]Gamrat B.,PHP and preprocessed Web pages,Dr.Dobbs Journal,January 2006,31(1):46~48
[2]何瑾,刘润华,基于开源思想的软件应用开发[J],河北师范大学学报,2006,31(7):32~35
[3]Veglis A.,Open Source Web Software for Windows Users,Distributed Systems Online,July 2006,7(7):5~6
[4]Pedro B.,Improving the speed of PHP Web scripts,Linux Journal,2002,78~81
[5]廖宇雷,大道至简知易行难[J],北京:软件世界,2006,40~41
[6]李守振,张南平,Web应用分层与开发框架设计研究[J],计算机工程,2006,32(22):274~276
[7]Yu Ping,Kontogiannis K.,Lau T.C.,Transforming legacy Web applications to the MVC architecture,Software Technology and Engineering Practice,September 2003,133~142
[8]爱民,PHP-Struts框架的设计与实现:[硕士学位论文],浙江:浙江大学,2004
[9]Erich Gamma,Richard Helm,Ralph Johns,Design Patterns:Elements of Reusable Object Oriented Software,Addison Wesley Publishing Company,1995,34~36
[10]吴启森,Web软件开发中类的构建及应用,浙江:计算机时代,2003,20~21
[11]Alan Shalloway,James R.Trott,Design Patterns Explained-A New Perspective on Object Oriented Design,Addison Wesley,2002,34~41
[12]Ramana U.V.,Some Experiments With the Performance of LAMP Architecture,Computer and Information Technology,September 2005,916~920
[13]Leon Atkinson,Core PHP Programming,Prentice Hall Professional Technical Reference,2003,16~39
[14]Fredrik Kristiansen,PHP Coding Standard,http://www.phpe.net,2007
[15]李涤,基于PHP的中文模板技术的研究:[硕士学位论文],重庆:重庆大学,2004
[16]周献华,PHP模板引擎介绍,北京:CSDN开发高手,2004,123~124
[17]Hasin Hayder,J.P.Maia, L.Gheorge,Smarty PHPTemplate Programming And Applications ,Packt Publishing,2006,23~33
[18]苏韶生,罗平,基于PHP技术的页面缓存的实现,浙江:计算机时代,2005,55~56
[19]Peng Jing,Application ofAjax in MVC mode,Journal of Wuhan University of Technology,July 2006,28(7):51~53
[20]Wayne R.,Railing on Ajax,Software Development,2005,13(11):27~30
[21]Paulson L.D.,Building rich web applications with Ajax,Computer,2005,38(10):14~17
[22]杨国瑞,张思博,基于Ajax的Web应用架构设计,现代电子技术,2006,29(15):95~98
[23]张金区,王云鹏,PHP对数据库的访问技术及执行效率的比较,计算机工程与应用,2005,41(9):167~170
[24]左凤朝,基于Web的数据库访问技术探析,计算机工程与应用,2005,52(15):36~38
[25]Ridjanovic D.,Okanovic V.,Using database framework in Web applications, Proceedings of the 12th IEEE Mediterranean Electrotechnical Conference,2004,
697~700
[26]K.Seluk Candan,Wen-Syan Li,Qiong Luo,and etc,Enabling dynamic content caching for database-driven websites,Proceedings of the 2001 ACM SIGMOD International Conference on Management of Data,2001,532~543
[27]Veglis A.,Leclercq M.,Quema V.,PHP and SQL made simple,Distributed Systems Online,August 2005,6(8):15~22
[28]Singh H.,XML programming with PHP andAjax,DB2 Magazine,2006,11(3):36~42
[29]Hassan S.,A Data Mediator for Storing and Querying XML Data in RDBMS using efficient schema-oblivious Mapping Strategies,ITS Telecommunications Proceedings ,June 2006,1311~1314
[30]陈浩,关于三种主流Web架构的思考,http://blog.csdn.net/Haohappy2004,2007
[31]朱庆伟,吴宇红,一种对象关系映射框架的分析和应用,电子科技,2004,172(1):54~57
[32]罗萍,岑永洪,页面流模型驱动的Web应用框架研究,计算机工程与应用,2006,42(26):92~95
[33]朱斌,黄水清,PostgreSQL与MySQL的比较研究初探,计算机时代,2003,12
[34]流年,软件世界,ThinkTemplate模板引擎的设计,2007,11
[35]左轻侯,程序员,PHP沉思录之四 Zend Framework,2007,12
致 谢
值此论文完成之际,首先要向我的导师黄龙军老师致以崇高的敬意和衷心的感谢。在整个毕业设计的过程中,黄老师给予了我非凡的信任和无比的耐心,着力培养我独立思考的能力和探索创新的精神,而当我的研究陷于停顿时,又会给我有益的指导和鼓励,重振我的信心。黄老师的督促和耐心的指导,使我时时感觉到他的关心。黄老师渊博的学识、敏捷的思维令人敬佩,踏实严谨的工作作风、高效的办事效率和平易近人的风格使我深受感动。
感谢学院党委副书记余华凌老师,他自始至终给予我精心的指导和教诲,并在各个方面都给予了悉心的关怀和照顾,使我能够克服困难顺利地完成毕业论文。余老师在学习、工作和生活上的教诲和帮助使我受益终生。
我还要感谢郭斌老师、赖非老师和雷刚老师,在我这四年的大学学习期间,他们在工作和学习上给了我很多帮助和指导,使我能顺利地完成学业。
本论文完成工作中,也受到了许多同学的帮助,是这些朋友的不吝赐教和无私的建议让我感受到友谊的可贵,同时也让我受益多多。在我的研究遇到困难时,他们给我提出了一些很有价值的意见和建议,使我能够将研究工作顺利地进行下去。
最后还要深深地感谢生我养我的父母,他们对我无私的支持是我不断前进的精神动力。养育之恩无以为报,唯有继续前进!
精品课程网站
系统管理
用户管理
资源管理
公告管理
单页管理
留言管理
链接管理
模板管理
系统登录
内容管理
I
获取本设计资料源文件,联系Q:1225467431,指导毕设,课设

www.phpzy.comtrue/php/19215.htmlTechArticle基于PHP和MVC技术架构的精品课程网站管理系统(含源文件).doc,mvc精品课程 获取本设计资料源文件,联系Q:1225467431,指导毕设,课设 摘 要 摘 要 精品课程建设是高校教学建设和教学改革工...

相关文章

    暂无相关文章

PHP之友评论

今天推荐