1、服务器要求PHP 版本 5.2 或更新的版本。MySQL 版本推荐 5.0 或者更新版本。模型-视图- 控制器 (MVC)MVC 是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC 应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C ),它们各自处理自己的任务。视图 :视图是用户看到并与之交互的界面。对老式的 Web 应用程序来说,视图就是由 HTML元素组成的界面,在新式的 Web 应用程序中,HTML 依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括 Adobe Flash 和象 XHTML,XML/XSL,WML 等一些标识语言和 Web
2、services。如何处理应用程序的界面变得越来越有挑战性。MVC 一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。模型 :模型表示企业数据和业务规则。在 MVC 的三个部件中,模型拥有最多的处理任务。例如它可能用象 EJBs 和 ColdFusion Components 这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性
3、。控制器 :控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击 Web 页面中的超链接和发送 HTML 表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。现在我们总结 MVC 的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。文件目录结构根目录| api 接口文件目录| caches 缓存文件目录| configs 系统配置文件目录| caches_* 系统缓
4、存目录| phpcms phpcms 框架主目录| languages 框架语言包目录| libs 框架主类库、主函数库目录| model 框架数据库模型目录| modules 框架模块目录| templates 框架系统模板目录| phpsso_server phpsso 主目录| statics 系统附件包| css 系统 css 包| images 系统图片包| js 系统 js 包| uploadfile 网站附件目录| admin.php 后台管理入口| index.php 程序主入口| crossdomain.xml FLASH 跨域传输文件| robots.txt 搜索引擎蜘蛛限
5、制配置文件| favicon.ico 系统 icon 图标URL 访问PHPCMS 是采用 MVC 设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。参数名称 描述 位置 备注m 模型/模块名称 phpcms/modules 中模块目录名称 必须c 控制器名称 phpcms/modules/模块/*.php 文件名称 必须a 事件名称 phpcms/modules/模块/*.php 中方法名称 模块访问方法示例:http:/ = pc_base:load_sys_class(http); /实例化 http 类pc
6、_base:load_sys_class(format, , 0); /调用 form 类,不进行实例化操作系统函数库调用/* 加载系统的函数库* param string $func 函数库名*/public static function load_sys_func($func) return self:_load_func( $func);示例:pc_base:load_sys_func(mail); 调用 mail 函数包入口程序PHPCMS 是采用 MVC 设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口
7、。入口程序是在前期处理用户请求的引导程序。它是唯一一个可以被最终用户可以直接请求运行的。phpcms v9 的入口程序包含如下几行:index.php这段代码首先加载了 phpcms 框架的引导文件 base.php,然后它根据指定的配置文件建立了一个 Web 应用实例并运行。模块phpcms v9 框架中的模块,位于 phpcms/modules 目录中 每一个目录称之为一个模块。即url 访问中的 m示例:http:/ phpcms/modules/content 这个模块。如果创建一个,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。控制器phpcms
8、v9 的控制器就是模块的类文件,位于 phpcms/modules/模块/目录下面。类名成就是文件名+.php,例如一个名为 mytest 的控制器,那么他的命名为 mytest.php 即可。控制器类默认继承系统的函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同。如果您创建了一个 mytest.php 在 test 模块下,那么我们在浏览器里面输入 URL:http:/ (!$reload elseif (isset ($configs$file$key) return $configs$file $key; else return $default ;$path = CACHE
9、_PATH.configs.DIRECTORY_SEPARATOR.$file.php;if (file_exists ($path) $configs $file = include $path;if (empty ($key) return $configs$file; elseif (isset($configs$file $key) return $configs$file $key; else return $default ;示例:调用系统配置中的附件路径$upload_url = pc_base:load_config(system,upload_url);二次开发技巧1.如果要
10、对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过“MY_*.php“的形式进行二次开发。例如您要对改 phpcms/mood/index.php 进行二次开发。您可以在与 index.php 同级的目录下建立“MY_index.php“ MY_index.php 代码如下array (hostname = localhost,database = phpcms,username = admin,password = admin,tablepre = v9_ ,charset = gbk,type = mysql ,debug = true,pconnect
11、= 0,autoconnect = 0),/* 以下默认不存在 */extended_1 = array (hostname = 10.10.125.2,database = phpcms,username = admin,password = admin,tablepre = v9_ ,charset = gbk,type = mysql ,debug = true,pconnect = 0,autoconnect = 0),);?根据您的数据库连接信息修改上面的配置内容,修改完成后,保存该数据库配置文件。路由配置路由配置文件位置:caches/configs/route.php我们打开这个
12、配置文件,加入我们的路由配置信息。路由配置信息为二维数组结构,默认为 default。路由配置文件内容是这样的:array(m=admin, c=index, a=init),=array (m=test, c=index, a=init),);?基中“m”为模型,“c”为控制器,“a”为事件,“data”为其他附加参数。data 为一个二维数组,可设置 POST 和 GET 的默认参数。POST 和 GET 分别对应 PHP 中的$_POST 和$_GET 两个超全局变量。如下面的例子,在程序中您可以使用$_POSTcatid来得到 data 下面 POST 中的数组的值。data 中的所设
13、置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。如:array(m =phpcms,c=index ,a=init ,data= array(POST=array(catid=1),GET=array(contentid=1)?外部程序 POST 了一个变量 catid=2 那么你在程序中使用$_POST 取到的值是 2,而不是配置文件中所设置的 1。系统配置系统配置文件位置:caches/configs/system.php具体详见该文件注释开发流程为你的 phpcms 创建一个模块的一般开发流程是:1. 创建数据库和数据表;(没有数据库操作可略过)2.
14、 创建模块目录3. 创建模块控制器类;4. 创建模块类与模块函数;(如果只是简单的模块可以不必创建)5. 创建模板文件;6. 运行和调试。创建模块phpcms v9 框架中的模块,位于 phpcms/modules 目录中 每一个目录称之为一个模块如果要创建一个模块,只要在 phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。例如我要开发一个叫做 test 的模块,那么首先在 phpcms/modules 目录下创建文件夹,并将其命名为 test。test 模块的标准结构通常是这样的。其中classes 为模块类库包functions 为模块函数库包templates 为
15、模块模板包 这里通常放置含有权限控制的控制器模板,也就是后台模板。如果您的模板有单独的前台模板,你需要在 phpcmstemplatesdefault 下创建一个您的模块目录来放置前台模板,“default“为你的风格包名称,我们默认适用 default创建模块控制器类在创建模块中我们已经创建好了一个名为“test” 的模块,接下来我们继续为这个模块添加两个控制器类。phpcms v9 的控制器就是模块的类文件,位于 phpcms/modules/模块/目录下面。类名成就是文件名+.php,例如一个名为 mytest 的控制器,那么他的命名为 mytest.php 即可。控制器类默认继承系统的
16、函数库,可以直接使用。控制器类的类名称与控制器文件名必须相同。控制器类文件包含两种形式:1.mytest.php 控制器,前台浏览(不含权限控制)这个控制器的 url 访问方法前面已经介绍过了,http:/ test 为模块名称 mytest 为模板目录下模板名称 ,default 为风格名称,默认不填为 defalut在上面例子中如果要给 mytest.php 中 init 方法加载一个 mytest 的模板,如下public function init() $var = hello world!;include template( test, mytest, default);这样我们通过
17、 url 访问该方法的时候也就加载了对应的模板。2.加载后台模板后台模板文件在 phpcmsmodules模块名称templates 目录中,本示例也就在phpcmsmodulestesttemplates 中加载模板方法如下:include $this-admin_tpl(mytest_admin_list);其中 mytest_admin_list 为 phpcmsmodulestesttemplates 中 mytest_admin_list.tpl.php,注意:此处模板必须以.tpl.php 作为后缀在上面例子中如果要给 mytest_admin.php 中 init 方法加载一个
18、mytest_admin_list 的模板,如下public function init() $myvar = oh,i am phpcmser;include $this-admin_tpl( mytest_admin_list);创建数据库模型类数据库模型位于:phpcms/model/ 目录下。数据模型文件的命名规则建议为数据表名称+_model.class.php如果在我们的创建的模块中我要使用一个数据库“test” ,首先需要建立一个数据库模型文件,文件名称为test_model.class.php内容如下:db_config = pc_base:load_config(databa
19、se);$this-db_setting = default;$this-table_name = test;parent:_construct();?注意:1.数据库模型类名称必须与文件名称相同;2.$this-db_setting = default为数据库配置文件中配置数据库链接池名称,默认为 default,一般情况下不需要修改。3.$this-table_name = test为数据表名称这样我们就建立好了一个数据库模型类。在模块的控制器中使用$this-db = pc_base:load_model(test_model);来加载。具体如下db = pc_base:load_mod
20、el(test_model);public function init() $result = $this-db-select();var_dump ($result);?其中$this-db 中所支持的方法请参照 phpcms/libs/classes/model.class.php 中方法PHPSSO 数据库结构 (2010-12-28 )PHPSSO 数据库结构 (2010-12-28)表 1 : ps_admin字段 类型 Null默认 额外 注释id smallint(6)PK auto_increment管理员 IDusernamechar(20) NO 用户名password c
21、har(32) NO 密码encrypt char(6) YES 密码密钥issuper tinyint(1) YES 0 是否为超级管理员lastlogin int(10) YES 最后登陆时间ip char(15) YES 最后登陆 IP键名 类型 字段PRIMARY PRIMARY idusername INDEX username表 2 : ps_applications字段 类型 Null默认 额外 注释appid smallint(6) unsignedPK auto_increment应用标识 idtype char(16) NO 标识类型name char(20) NO 应用名
22、称url char(255) NO 应用访问地址authkey char(255) NO 通信密钥ip char(15) NO 应用 ip 地址apifilenamechar(30) NO phpsso.php api 通信文件名称charset char(8) NO 应用字符集synlogin tinyint(1) NO 0 是否同步登陆键名 类型 字段PRIMARY PRIMARY appidsynlogin INDEX synlogin表 3 : ps_members字段 类型 Null默认 额外 注释uid int(10) unsigned PK auto_increment用户标识
23、idusernamechar(20) NO 用户名password char(32) NO 密码random char(8) NO 安全码email char(32) NO 邮箱regip char(15) NO 注册 ipregdate int(10) unsigned NO 0 注册时间lastip char(15) NO 0 上次登录 iplastdate int(10) unsigned NO 0 上次登录时间appname char(15) NO 用户来源应用名称type enum(app,connect) YES 用户类型(应用,连接)avatar tinyint(1) NO 0
24、是否有头像ucuserid mediumint(8) unsignedYES 0 ucenter 用户 ID键名 类型 字段PRIMARY PRIMARY uidusername INDEX usernameemail INDEX emailucuserid INDEX ucuserid表 4 : ps_messagequeue字段 类型 Null默认 额外 注释id int(10) unsigned PK auto_increment识标 idoperation char(32) NO 操作称名succeed tinyint(1) NO 0 是否完成totalnum smallint(6)
25、unsignedNO 0 通知次数noticedatamediumtext NO 通信数据dateline int(10) unsigned NO 0 时间appstatus mediumtext YES app 通信状态 json 数组键名 类型 字段PRIMARY PRIMARY iddateline INDEX datelinesucceed INDEX succeedsucceed INDEX id表 5 : ps_session session 存储表字段 类型 Null默认 额外 注释sessionidchar(32) PK userid mediumint(8) unsigned
26、NO 0 用户 idip char(15) NO 当前 iplastvisit int(10) unsigned NO 0 最后访问时间roleid tinyint(3) unsigned YES 0 角色 idgroupid tinyint(3) unsigned NO 0 会员组 idm char(20) NO 模块c char(20) NO 文件名a char(20) NO 方法data char(255) NO 数据键名 类型 字段PRIMARY PRIMARY sessionidlastvisit HASH lastvisit表 6 : ps_settings字段 类型 Null 默认 额外 注释name varchar(32)PK 设置称名data text NO 设置数据键名 类型 字段PRIMARY PRIMARY name