文件目錄結(jié)構(gòu) 根目錄 | – api 接口文件目錄 | – caches 緩存文件目錄 | – configs 系統(tǒng)配置文件目錄 | – caches_* 系統(tǒng)緩存目錄 | – phpcms phpcms框架主目錄 | – languages 框架語言包目錄 | – libs 框架主類庫、主函數(shù)庫目錄 | – model 框架數(shù)據(jù)庫模型目錄 | – modules 框架模塊目錄 | – templates 框架系統(tǒng)模板目錄 | – phpsso_server phpsso主目錄 | – statics 系統(tǒng)附件包 | – css 系統(tǒng)css包 | – images 系統(tǒng)圖片包 | – js 系統(tǒng)js包 | – uploadfile 網(wǎng)站附件目錄 | – admin.php 后臺(tái)管理入口 | – index.php 程序主入口 | – crossdomain.xml FLASH跨域傳輸文件 | – robots.txt 搜索引擎蜘蛛限制配置文件 | – favicon.ico 系統(tǒng)icon圖標(biāo)
URL訪問 PHPCMS是采用MVC設(shè)計(jì)模式開發(fā),基于模塊和操作的方式進(jìn)行訪問,采用單一入口模式進(jìn)行項(xiàng)目部署和訪問,無論訪問任何一個(gè)模塊或者功能,只有一個(gè)統(tǒng)一的入口。 參數(shù)名稱 描述 位置 備注 m 模型/模塊名稱 phpcms/modules中模塊目錄名稱 必須 c 控制器名稱 phpcms/modules/模塊/*.php 文件名稱 必須 a 事件名稱 phpcms/modules/模塊/*.php 文件中方法名稱
模塊訪問方法[示例]: http:///index.php?m=content&c=index&a=show&id=1 其中 m = content 為模型/模塊名稱 位于phpcms/modules/content c = index 為控制器名稱 位于phpcms/modules/content/index.php a = show 為方法名稱 位于phpcms/modules/content/index.php 中show()方法 id = 1 為其他參數(shù) 與正常get傳遞參數(shù)形式相同
如果我們?cè)L問您的域名 如: http://www./index.php phpcms默認(rèn)路由會(huì)定位到content模塊的index控制器中的init操作,因?yàn)橄到y(tǒng)在沒有指定模塊和控制器的時(shí)候,會(huì)執(zhí)行默認(rèn)的模塊和操作。 因此下面的URL的結(jié)果是相同的:系統(tǒng)還支持URL路由的功能,這些都能夠帶來其他的url訪問效果。 http://www./index.php?m=content&c=index&a=init
系統(tǒng)類庫與函數(shù)調(diào)用 1.系統(tǒng)類庫位于系統(tǒng)的phpcms/libs/classes目錄下面,函數(shù)庫文件名為*.class.php 2.系統(tǒng)函數(shù)庫位于系統(tǒng)的phpcms/libs/functions目錄下面,函數(shù)庫文件名為*.func.php,其中g(shù)lobal.func.php為框架中默認(rèn)加載,global.func.php中函數(shù)可直接使用 系統(tǒng)類庫調(diào)用 pc_base::load_sys_class('類名','擴(kuò)展地址','是否初始化'); 示例: $http = pc_base::load_sys_class('http'); //實(shí)例化http類 pc_base::load_sys_class('format', '', 0); //調(diào)用form類,不進(jìn)行實(shí)例化操作 系統(tǒng)函數(shù)庫調(diào)用 pc_base::load_sys_func('函數(shù)庫名'); 示例: pc_base::load_sys_func('mail'); 調(diào)用mail函數(shù)包
模塊 phpcms v9框架中的模塊,位于phpcms/modules目錄中 每一個(gè)目錄稱之為一個(gè)模塊。即url訪問中的m 示例: http://www./index.php?m=content 那么您訪問的就是phpcms/modules/content 這個(gè)模塊。 如果創(chuàng)建一個(gè)模塊,只要在 phpcms/modules 目錄下創(chuàng)建文件夾并放入你的控制器類就可以了
控制器 phpcms v9的控制器就是模塊的類文件,位于phpcms/modules/模塊/目錄下面。類名成就是文件名+.php,例如一個(gè)名為mytest的控制器,那么他的命名為mytest.php即可。 控制器類默認(rèn)繼承系統(tǒng)的函數(shù)庫,可以直接使用??刂破黝惖念惷Q與控制器文件名必須相同 如果您創(chuàng)建了一個(gè)mytest.php在test模塊下,那么我們?cè)跒g覽器里面輸入U(xiǎn)RL: http://www./index.php?m=test&c=mytest
下面是一個(gè)控制器類的基本格式,在構(gòu)建模塊部分會(huì)具體講解 defined('IN_PHPCMS') or exit('No permission resources.'); class mytest { function __construct() { } public function init() { echo 'hellp phpcms v9,my name is defalut action'; } } ?> 如果你添加的控制器類繼承了其他的類,你要小心你的方法名不要和那個(gè)類中的方法名一樣了,否則你的方法會(huì)覆蓋原有的。
命名規(guī)范 PHPCMS其自身的一定規(guī)范。下面是使用PHPCMS做二次開發(fā)中應(yīng)該遵循的命名規(guī)范: 類文件需要以.class.php為后綴(這里是指的phpcms的系統(tǒng)類庫文件和模塊中的類庫文件,第三方引入的不做要求),例如http.class.php。 函數(shù)文件需要以.func.php為后綴(第三方引入的不做要求),例如mail.func.php。 類名和文件名一致,例如 phpcmsapp類的文件命名是phpcmsapp.class.php。 數(shù)據(jù)模型需要以“數(shù)據(jù)表名稱_model.class.php”為形式,類名稱與文件名必須相同。
配置文件調(diào)用 配置文件配置在caches/configs/目錄下。 配置文件調(diào)用:使用 load_config方法 $upload_url = pc_base::load_config('配置文件','要獲取的配置鍵','默認(rèn)配置。當(dāng)獲取配置項(xiàng)目失敗時(shí)該值發(fā)生作用','是否強(qiáng)制重新加載'); 示例: 調(diào)用系統(tǒng)配置中的附件路徑 $upload_url = pc_base::load_config('system','upload_url');
二次開發(fā)技巧 1.如果要對(duì)已存在的控制器進(jìn)行二次開發(fā),為了方便升級(jí)不建議直接對(duì)內(nèi)核文件直接修改該,您可以通過"MY_*.php"的形式進(jìn)行二次開發(fā)。 例如您要對(duì)改phpcms/mood/index.php進(jìn)行二次開發(fā)。您可以在與index.php同級(jí)的目錄下建立"MY_index.php" MY_index.php代碼如下 class MY_index extends index{ function __construct() { parent::__construct(); } //……your code } ?> 這樣當(dāng)您通過url訪問index控制器的時(shí)候,系統(tǒng)會(huì)默認(rèn)指向MY_index.php 并且原文件的方法將被繼承,可以直接使用。
數(shù)據(jù)庫配置 數(shù)據(jù)庫配置文件位置:caches/configs/database.php 我們打開這個(gè)配置文件,加入我們的數(shù)據(jù)庫配置信息。數(shù)據(jù)庫配置信息為二維數(shù)組結(jié)構(gòu),默認(rèn)為default,可以根據(jù)default結(jié)構(gòu)配置多個(gè)數(shù)據(jù)庫鏈接(如:extended_1) return array ( 'default' => array ( 'hostname' => 'localhost', 'database' => 'phpcms', 'username' => 'admin', 'password' => 'admin', 'tablepre' => 'v9_', 'charset' => 'gbk', 'type' => 'mysql', 'debug' => true, 'pconnect' => 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 ), ); ?> 根據(jù)您的數(shù)據(jù)庫連接信息修改上面的配置內(nèi)容,修改完成后,保存該數(shù)據(jù)庫配置文件。
路由配置 路由配置文件位置:caches/configs/route.php 我們打開這個(gè)配置文件,加入我們的路由配置信息。路由配置信息為二維數(shù)組結(jié)構(gòu),默認(rèn)為default。 路由配置文件內(nèi)容是這樣的: return array( 'default'=>array('m'=>'admin', 'c'=>'index', 'a'=>'init'), 'test.youname.com'=>array('m'=>'test', 'c'=>'index', 'a'=>'init'), ); ?> data為一個(gè)二維數(shù)組,可設(shè)置POST和GET的默認(rèn)參數(shù)。POST和GET分別對(duì)應(yīng)PHP中的$_POST和$_GET兩個(gè)超全局變量。 如下面的例子,在程序中您可以使用$_POST['catid']來得到data下面POST中的數(shù)組的值。 data中的所設(shè)置的參數(shù)等級(jí)比較低。如果外部程序有提交相同的名字的變量,將會(huì)覆蓋配置文件中所設(shè)置的值。 如: return array( 'default'=>array( 'm'=>'phpcms', 'c'=>'index', 'a'=>'init', 'data'=>array( 'POST'=>array( 'catid'=>1 ), 'GET'=>array( 'contentid'=>1 ) ) ) ) ?> 外部程序POST了一個(gè)變量catid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所設(shè)置的1。
系統(tǒng)配置 系統(tǒng)配置文件位置:caches/configs/system.php 具體詳見該文件注釋
構(gòu)建模塊 開發(fā)流程 為你的phpcms創(chuàng)建一個(gè)模塊的一般開發(fā)流程是: 1. 創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表;(沒有數(shù)據(jù)庫操作可略過) 2. 創(chuàng)建模塊目錄 3. 創(chuàng)建模塊控制器類; 4. 創(chuàng)建模塊類與模塊函數(shù);(如果只是簡(jiǎn)單的模塊可以不必創(chuàng)建) 5. 創(chuàng)建模板文件; 6. 運(yùn)行和調(diào)試。
創(chuàng)建模塊 phpcms v9框架中的模塊,位于phpcms/modules目錄中 每一個(gè)目錄稱之為一個(gè)模塊 如果要?jiǎng)?chuàng)建一個(gè)模塊,只要在 phpcms/modules 目錄下創(chuàng)建文件夾并放入你的控制器類就可以了。 例如我要開發(fā)一個(gè)叫做test的模塊,那么首先在 phpcms/modules 目錄下創(chuàng)建文件夾,并將其命名為test。 test文件夾下通常有三個(gè)文件夾: classes 為模塊類庫包 functions 為模塊函數(shù)庫包 templates 為模塊模板包 這里通常放置含有權(quán)限控制的控制器模板,也就是后臺(tái)模板。
如果您的模板有單獨(dú)的前臺(tái)模板,你需要在phpcms\templates\default下創(chuàng)建一個(gè)您的模塊目錄來放置前臺(tái)模板 "default"為你的風(fēng)格包名稱,我們默認(rèn)適用default 這里我們?cè)赿efault文件夾下創(chuàng)建名為test的文件夾存放模板
創(chuàng)建模塊控制器 在創(chuàng)建模塊中我們已經(jīng)創(chuàng)建好了一個(gè)名為“test”的模塊,接下來我們繼續(xù)為這個(gè)模塊添加兩個(gè)控制器類。 phpcms v9的控制器就是模塊的類文件,位于phpcms/modules/模塊/目錄下面。 類名成就是文件名+.php,例如一個(gè)名為mytest的控制器,那么他的命名為mytest.php即可。 控制器類默認(rèn)繼承系統(tǒng)的函數(shù)庫,可以直接使用??刂破黝惖念惷Q與控制器文件名必須相同。
控制器類文件包含兩種形式: 1.mytest.php 控制器,前臺(tái)瀏覽(不含權(quán)限控制) /* defined('IN_PHPCMS') or exit('No permission resources.'); class mytest { function __construct() { } public function init() { $myvar = 'hello world!'; echo $myvar; } public function mylist() { $myvar = 'hello world!this is a example!'; echo $myvar; } } */ ?> 這個(gè)控制器的url訪問方法前面已經(jīng)介紹過了 http://www./index.php?m=test&c=mytest http://www./index.php?m=test&c=mytest&a=mylist 沒有填寫 “a” 的情況下,默認(rèn)調(diào)用init方法
2.mytest_admin.php 控制器,后臺(tái)管理(含權(quán)限控制) 后臺(tái)控制控制器需要加載admin模塊下的admin類,并繼承該類。 需要注意的是因?yàn)槟闾砑拥目刂破黝惱^承了其他的類,你要小心你控制器的方法名不要和該類中的方法名一樣了,否則會(huì)造成影響,具體請(qǐng)查看admin類中有哪些方法。 defined('IN_PHPCMS') or exit('No permission resources.'); pc_base::load_app_class('admin','admin',0); class mytest_admin extends admin { public function __construct() { } public function init() { $myvar = 'oh,i am phpcmser'; echo $myvar; } } ?> 在控制器中增加模板調(diào)用 phpcms 可以實(shí)現(xiàn)完全的模板與程序分離,所以在我們的控制器程序中要加載模板,才可以更友好的顯示出來。 1.加載前臺(tái)模板 前臺(tái)模板文件在phpcms\templates\default\模塊名稱 目錄中,本示例也就在phpcms\templates\default\test中 加載模板方法如下: include template('test', 'mytest', 'default'); 其中 test為模塊名稱 mytest 為模板目錄下模板名稱,default為風(fēng)格名稱,默認(rèn)不填為defalut 在上面例子中如果要給mytest.php中init方法加載一個(gè)mytest的模板,如下 public function init() { $var = 'hello world!'; include template('test', 'mytest', 'default'); } 這樣我們通過url訪問該方法的時(shí)候也就加載了對(duì)應(yīng)的模板。 2.加載后臺(tái)模板 后臺(tái)模板文件在phpcms\modules\模塊名稱\templates 目錄中,本示例也就在phpcms\modules\test\templates 中 加載模板方法如下: include $this->admin_tpl('mytest_admin_list'); 其中mytest_admin_list為phpcms\modules\test\templates中mytest_admin_list.tpl.php,注意:后臺(tái)模板必須以.tpl.php 作為后綴 在上面例子中如果要給mytest_admin.php中init方法加載一個(gè)mytest_admin_list的模板,如下 public function init() { $myvar = 'oh,i am phpcmser'; include $this->admin_tpl('mytest_admin_list'); }
創(chuàng)建數(shù)據(jù)庫模型類 數(shù)據(jù)庫模型位于:phpcms/model/ 目錄下。 數(shù)據(jù)模型文件的命名規(guī)則建議為數(shù)據(jù)表名稱+'_model.class.php' 如果在我們的創(chuàng)建的模塊中我要使用一個(gè)數(shù)據(jù)庫"test",首先需要建立一個(gè)數(shù)據(jù)庫模型文件,文件名稱為'test_model.class.php' 內(nèi)容如下: defined('IN_PHPCMS') or exit('No permission resources.'); pc_base::load_sys_class('model', '', 0); class test_model extends model { public function __construct() { $this->db_config = pc_base::load_config('database'); $this->db_setting = 'default'; $this->table_name = 'test'; parent::__construct(); } } ?> 注意: 1.數(shù)據(jù)庫模型類名稱必須與文件名稱相同; 2.$this->db_setting = 'default'為數(shù)據(jù)庫配置文件中配置數(shù)據(jù)庫鏈接池名稱,默認(rèn)為default,一般情況下不需要修改。 3.$this->table_name = 'test'為數(shù)據(jù)表名稱
這樣我們就建立好了一個(gè)數(shù)據(jù)庫模型類。 在模塊的控制器中使用 $this->db = pc_base::load_model('test_model'); 來加載。 具體如下 /* defined('IN_PHPCMS') or exit('No permission resources.'); class mytest { private $db; function __construct() { $this->db = pc_base::load_model('test_model'); } public function init() { $result = $this->db->select(); var_dump($result); } } */ ?> 其中$this->db中所支持的方法請(qǐng)參照phpcms/libs/classes/model.class.php中方法 |
|