服务器要求PHP 版本5.2 或更新的版本。
MySQL版本推荐5.0或者更新版本。
模型-视图-控制器(MVC)MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。
使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。
视图:视图是用户看到并与之交互的界面。
对老式的Web应用程序来说,视图就是由HTML 元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services。
如何处理应用程序的界面变得越来越有挑战性。
MVC一个大的好处是它能为你的应用程序处理很多不同的视图。
在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
模型:模型表示企业数据和业务规则。
在MVC的三个部件中,模型拥有最多的处理任务。
例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。
被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。
由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器:控制器接受用户的输入并调用模型和视图去完成用户的需求。
所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。
它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。
现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
文件目录结构根目录| – api 接口文件目录| – caches 缓存文件目录| – configs系统配置文件目录| – caches_* 系统缓存目录| – 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 搜索引擎蜘蛛限制配置文件| – favicon.ico 系统icon图标URL访问PHPCMS是采用MVC设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
模块访问方法[示例]:/index.php?m=content&c=index&a=show&id=1其中m = content 为模型/模块名称位于phpcms/modules/contentc = index 为控制器名称位于phpcms/modules/content/index.phpa = show为时间名称位于phpcms/modules/content/index.php中show()方法id = 1为其他参数与正常get传递参数形式相同如果我们访问您的域名如:/index.phpphpcms默认路由会定位到content模块的index控制器中的init操作,因为系统在没有指定模块和控制器的时候,会执行默认的模块和操作。
因此下面的URL的结果是相同的:系统还支持URL路由的功能,这些都能够带来其他的url访问效果。
/index.php?m=content&c=index&a=init系统类库与函数库调用1.系统类库位于系统的phpcms/libs/classes目录下面,函数库文件名为*.class.php,其中global.func.php为框架中默认加载,global.func.php中函数可直接使用2.系统函数库位于系统的phpcms/libs/functions目录下面,函数库文件名为*.func.php系统类库调用/*** 加载系统类方法* @param string $classname类名* @param string $path 扩展地址* @paramintger $initialize 是否初始化*/public static function load_sys_class($classname, $path ='', $initialize =1){return self::_load_class($classname, $path, $initialize);}示例:$http = pc_base::load_sys_class('http'); //实例化http类pc_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设计模式开发,基于模块和操作的方式进行访问,采用单一入口模式进行项目部署和访问,无论访问任何一个模块或者功能,只有一个统一的入口。
入口程序是在前期处理用户请求的引导程序。
它是唯一一个可以被最终用户可以直接请求运行的。
phpcms v9的入口程序包含如下几行:index.php<?phpdefine('PHPCMS_PA TH', dirname(__FILE__).DIRECTORY_SEPARATOR);include PHPCMS_PA TH.'/phpcms/base.php';pc_base::creat_app();?>这段代码首先加载了phpcms框架的引导文件base.php,然后它根据指定的配置文件建立了一个Web 应用实例并运行。
模块phpcms v9框架中的模块,位于phpcms/modules目录中每一个目录称之为一个模块。
即url 访问中的m示例:/index.php?m=content那么您访问的就是phpcms/modules/content 这个模块。
如果创建一个,只要在phpcms/modules 目录下创建文件夹并放入你的控制器类就可以了。
控制器phpcms v9的控制器就是模块的类文件,位于phpcms/modules/模块/目录下面。
类名成就是文件名+.php,例如一个名为mytest的控制器,那么他的命名为mytest.php即可。
控制器类默认继承系统的函数库,可以直接使用。
控制器类的类名称与控制器文件名必须相同。
如果您创建了一个mytest.php在test模块下,那么我们在浏览器里面输入URL:/index.php?m=test&c=mytest下面是一个控制器类的基本格式,在构建模块部分会具体讲解<?phpdefined('IN_PHPCMS')or exit('No permission resources.');class mytest {function __construct(){}public function init(){echo 'hellpphpcms v9,my name is defalut action';}}?>如果你添加的控制器类继承了其他的类,你要小心你的方法名不要和那个类中的方法名一样了,否则你的方法会覆盖原有的。
命名规范PHPCMS其自身的一定规范。
下面是使用PHPCMS做二次开发中应该遵循的命名规范:类文件需要以.class.php为后缀(这里是指的phpcms的系统类库文件和模块中的类库文件,第三方引入的不做要求),例如http.class.php。
函数文件需要以.func.php为后缀(第三方引入的不做要求),例如mail.func.php。
类名和文件名一致,例如 phpcmsapp类的文件命名是phpcmsapp.class.php。
数据模型需要以“数据表名称_model.class.php”为形式,类名称与文件名必须相同。
配置文件调用配置文件配置在caches/configs/目录下。
配置文件调用:使用 load_config方法/*** 加载配置文件* @param string $file 配置文件* @param string $key 要获取的配置荐* @param string $default 默认配置。
当获取配置项目失败时该值发生作用。
* @paramboolean $reload 强制重新加载。
*/public static function load_config($file, $key ='', $default ='', $reload =false){static $configs = array();if(!$reload && isset($configs[$file])){if(empty($key)){return $configs[$file];} elseif (isset($configs[$file][$key])){return $configs[$file][$key];}else{return $default;}}$path = CACHE_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.如果要对已存在的控制器进行二次开发,为了方便升级不建议直接对内核文件直接修改该,您可以通过"MY_*.php"的形式进行二次开发。