文件目錄結構 根目錄 | – 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設計模式開發,基於模塊和操作的方式進行訪問,采用單一入口模式進行項目部署和訪問,無論訪問任何一個模塊或者功能,只有一個統一的入口。 參數名稱 描述 位置 備注 m 模型/模塊名稱 phpcms/modules中模塊目錄名稱 必須 c 控制器名稱 phpcms/modules/模塊/*.php 文件名稱 必須 a 事件名稱 phpcms/modules/模塊/*.php 文件中方法名稱 模塊訪問方法[示例]: http://yourdomain.com/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 為其他參數 與正常get傳遞參數形式相同 如果我們訪問您的域名 如: http://www.yourdomain.com/index.php phpcms默認路由會定位到content模塊的index控制器中的init操作,因為系統在沒有指定模塊和控制器的時候,會執行默認的模塊和操作。 因此下面的URL的結果是相同的:系統還支持URL路由的功能,這些都能夠帶來其他的url訪問效果。 http://www.yourdomain.com/index.php?m=content&c=index&a=init 系統類庫與函數調用 1.系統類庫位於系統的phpcms/libs/classes目錄下面,函數庫文件名為*.class.php 2.系統函數庫位於系統的phpcms/libs/functions目錄下面,函數庫文件名為*.func.php,其中global.func.php為框架中默認加載,global.func.php中函數可直接使用 系統類庫調用 pc_base::load_sys_class('類名','擴展地址','是否初始化'); 示例: $http = pc_base::load_sys_class('http'); //實例化http類 pc_base::load_sys_class('format', '', 0); //調用form類,不進行實例化操作 系統函數庫調用 pc_base::load_sys_func('函數庫名'); 示例: pc_base::load_sys_func('mail'); 調用mail函數包 模塊 phpcms v9框架中的模塊,位於phpcms/modules目錄中 每一個目錄稱之為一個模塊。即url訪問中的m 示例: http://www.yourname.com/index.php?m=content 那么您訪問的就是phpcms/modules/content 這個模塊。 如果創建一個模塊,只要在 phpcms/modules 目錄下創建文件夾並放入你的控制器類就可以了 控制器 phpcms v9的控制器就是模塊的類文件,位於phpcms/modules/模塊/目錄下面。類名成就是文件名+.php,例如一個名為mytest的控制器,那么他的命名為mytest.php即可。 控制器類默認繼承系統的函數庫,可以直接使用。控制器類的類名稱與控制器文件名必須相同 如果您創建了一個mytest.php在test模塊下,那么我們在瀏覽器里面輸入URL: http://www.yourname.com/index.php?m=test&c=mytest 下面是一個控制器類的基本格式,在構建模塊部分會具體講解 <?php defined('IN_PHPCMS') or exit('No permission resources.'); class mytest { function __construct() { } public function init() { echo 'hellp phpcms 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方法 $upload_url = pc_base::load_config('配置文件','要獲取的配置鍵','默認配置。當獲取配置項目失敗時該值發生作用','是否強制重新加載'); 示例: 調用系統配置中的附件路徑 $upload_url = pc_base::load_config('system','upload_url'); 二次開發技巧 1.如果要對已存在的控制器進行二次開發,為了方便升級不建議直接對內核文件直接修改該,您可以通過"MY_*.php"的形式進行二次開發。 例如您要對改phpcms/mood/index.php進行二次開發。您可以在與index.php同級的目錄下建立"MY_index.php" MY_index.php代碼如下 <?php class MY_index extends index{ function __construct() { parent::__construct(); } //……your code } ?> 這樣當您通過url訪問index控制器的時候,系統會默認指向MY_index.php 並且原文件的方法將被繼承,可以直接使用。 數據庫配置 數據庫配置文件位置:caches/configs/database.php 我們打開這個配置文件,加入我們的數據庫配置信息。數據庫配置信息為二維數組結構,默認為default,可以根據default結構配置多個數據庫鏈接(如:extended_1) <?php 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 ), ); ?> 根據您的數據庫連接信息修改上面的配置內容,修改完成后,保存該數據庫配置文件。 路由配置 路由配置文件位置:caches/configs/route.php 我們打開這個配置文件,加入我們的路由配置信息。路由配置信息為二維數組結構,默認為default。 路由配置文件內容是這樣的: <?php return array( 'default'=>array('m'=>'admin', 'c'=>'index', 'a'=>'init'), 'test.youname.com'=>array('m'=>'test', 'c'=>'index', 'a'=>'init'), ); ?> data為一個二維數組,可設置POST和GET的默認參數。POST和GET分別對應PHP中的$_POST和$_GET兩個超全局變量。 如下面的例子,在程序中您可以使用$_POST['catid']來得到data下面POST中的數組的值。 data中的所設置的參數等級比較低。如果外部程序有提交相同的名字的變量,將會覆蓋配置文件中所設置的值。 如: <?php return array( 'default'=>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. 創建模塊目錄 3. 創建模塊控制器類; 4. 創建模塊類與模塊函數;(如果只是簡單的模塊可以不必創建) 5. 創建模板文件; 6. 運行和調試。 創建模塊 phpcms v9框架中的模塊,位於phpcms/modules目錄中 每一個目錄稱之為一個模塊 如果要創建一個模塊,只要在 phpcms/modules 目錄下創建文件夾並放入你的控制器類就可以了。 例如我要開發一個叫做test的模塊,那么首先在 phpcms/modules 目錄下創建文件夾,並將其命名為test。 test文件夾下通常有三個文件夾: classes 為模塊類庫包 functions 為模塊函數庫包 templates 為模塊模板包 這里通常放置含有權限控制的控制器模板,也就是后台模板。 如果您的模板有單獨的前台模板,你需要在phpcms\templates\default下創建一個您的模塊目錄來放置前台模板 "default"為你的風格包名稱,我們默認適用default 這里我們在default文件夾下創建名為test的文件夾存放模板 創建模塊控制器 在創建模塊中我們已經創建好了一個名為“test”的模塊,接下來我們繼續為這個模塊添加兩個控制器類。 phpcms v9的控制器就是模塊的類文件,位於phpcms/modules/模塊/目錄下面。 類名成就是文件名+.php,例如一個名為mytest的控制器,那么他的命名為mytest.php即可。 控制器類默認繼承系統的函數庫,可以直接使用。控制器類的類名稱與控制器文件名必須相同。 控制器類文件包含兩種形式: 1.mytest.php 控制器,前台瀏覽(不含權限控制) <?php /* 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; } } */ ?> 這個控制器的url訪問方法前面已經介紹過了 http://www.yourname.com/index.php?m=test&c=mytest http://www.yourname.com/index.php?m=test&c=mytest&a=mylist 沒有填寫 “a” 的情況下,默認調用init方法 2.mytest_admin.php 控制器,后台管理(含權限控制) 后台控制控制器需要加載admin模塊下的admin類,並繼承該類。 需要注意的是因為你添加的控制器類繼承了其他的類,你要小心你控制器的方法名不要和該類中的方法名一樣了,否則會造成影響,具體請查看admin類中有哪些方法。 <?php 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; } } ?> 在控制器中增加模板調用 phpcms 可以實現完全的模板與程序分離,所以在我們的控制器程序中要加載模板,才可以更友好的顯示出來。 1.加載前台模板 前台模板文件在phpcms\templates\default\模塊名稱 目錄中,本示例也就在phpcms\templates\default\test中 加載模板方法如下: include template('test', 'mytest', 'default'); 其中 test為模塊名稱 mytest 為模板目錄下模板名稱,default為風格名稱,默認不填為defalut 在上面例子中如果要給mytest.php中init方法加載一個mytest的模板,如下 public function init() { $var = 'hello world!'; include template('test', 'mytest', 'default'); } 這樣我們通過url訪問該方法的時候也就加載了對應的模板。 2.加載后台模板 后台模板文件在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,注意:后台模板必須以.tpl.php 作為后綴 在上面例子中如果要給mytest_admin.php中init方法加載一個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' 內容如下: <?php 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.數據庫模型類名稱必須與文件名稱相同; 2.$this->db_setting = 'default'為數據庫配置文件中配置數據庫鏈接池名稱,默認為default,一般情況下不需要修改。 3.$this->table_name = 'test'為數據表名稱 這樣我們就建立好了一個數據庫模型類。 在模塊的控制器中使用 $this->db = pc_base::load_model('test_model'); 來加載。 具體如下 <?php /* 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中所支持的方法請參照phpcms/libs/classes/model.class.php中方法