轉自:http://www.cnblogs.com/Braveliu/p/5101345.html
為phpcms創建一個模塊的開發流程
【1】創建模塊目錄
通過前面的學習,我們已經知道phpcms V9框架中的模塊位於phcms/modules目錄中,每一個目錄稱之為一個模塊。
如果要創建一個模塊,只要在 phpcms/modules 目錄下創建文件夾並放入你的控制器類就可以了。
例如我要開發一個叫做test的模塊,那麼首先在 phpcms/modules 目錄下創建文件夾,並將其命名為test。
觀察其他模塊的結構,可知test模塊的標准結構通常應該也是這樣的:
classes 為模塊類庫包
functions 為模塊函數庫包
templates 為模塊模板包,通常放置含有權限控制的控制器模板,也就是後台模板。
如果你的模板有自定義的前台模板,你需要在phpcms\templates\default目錄下創建一個你的模塊名目錄來放置前台模板,“default”為你的風格包名稱,我們默認是用default。
【2】創建模塊控制器類
上一步,我們已經創建好了一個名為test的模塊,接下來我們繼續為這個模塊添加兩個控制器類。
phpcms V9 的控制器就是模塊的類文件,位於phpcms/modules/模塊名/目錄下面。類文件名稱就是控制器名+.php,例如一個名為mytest的控制器,那麼它的命名為mytest.php即可。控制器類默認繼承系統的函數庫,可以直接使用。
控制器類的類名稱與控制器文件名必須相同。
控制器類文件包含兩種形式:
1.前台浏覽(不含權限控制),mytest.php 控制器
在phpcms/modules/test 目錄下,新建文本文件,命名為mytest,修改文件類型為php, 用Notepad++打開編輯內容為:
1 <?php 2 defined('IN_PHPCMS') or exit('No permission resources.'); 3 class mytest 4 { 5 function __construct(){} 6 public function init() 7 { 8 $myvar = 'hello world!'; 9 echo $myvar; 10 } 11 public function mylist() 12 { 13 $myvar = 'hello world! This is an example!'; 14 echo $myvar; 15 } 16 } 17 ?>
其實,這個控制器的URL訪問方法前面已經介紹過,請參見《phpcms V9 MVC模式與URL訪問解析》
http://www.abcd.com.cn/phpcms/index.php?m=test&c=mytest等價於
http://www.abcd.com.cn/phpcms/index.php?m=test&c=mytest&a=init。
沒有填寫“a”值的情況下,默認調用init方法。
為什麼這樣子?請把《phpcms V9 MVC模式與URL訪問解析》再讀一遍。
2.後台管理(含權限控制),mytest_admin.php 控制器
後台控制器需要加載admin模塊下的admin類,並繼承該類。需要注意的是因為添加的控制器類繼承了其它的類,要小心控制器類的方法名不要和該類中的方法名一樣了,否則會造成影響,具體請查看admin類中有哪些方法。
在phpcms/modules/test 目錄下,新建文本文件,命名為mytest_admin,修改文件類型為php, 用Notepad++打開編輯內容為:
1 <?php 2 defined('IN_PHPCMS') or exit('No permission resources.'); 3 pc_base::load_app_class('admin','admin',0); 4 class mytest_admin extends admin 5 { 6 public function __construct() {} 7 public function init() 8 { 9 $myvar = 'oh,i am phpcmser'; 10 echo $myvar; 11 } 12 } 13 ?>
在控制器中增加模板調用
phpcms 可以實現完全的模板與程序分離,所以在我們的控制器程序中要加載模板,才可以更友好的顯示出來。
1.加載前台模板
前台模板文件在phpcms\templates\default\模塊名稱的目錄中,本示例也就在phpcms\templates\default\test中。
加載模板方法如下:
1 // 加載模板方法: 2 include template('test', 'mytest', 'default');
其中,test為模塊名稱,mytest為模板目錄下模板名稱,default為風格名稱,默認為default。
在上面例子中如果要給mytest.php中init方法加載一個mytest的模板(可以拷貝content模塊下的index.html作為替代),如下(所以模板名稱為index):
1 public function init() 2 { 3 $myvar = 'hello world!'; 4 echo $myvar; 5 include template('test', 'index'); 6 }
這時,當我們再通過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的模板,如下:
1 public function init() 2 { 3 $myvar = 'oh,i am phpcmser'; 4 echo $myvar; 5 include $this->admin_tpl('mytest_admin_list'); 6 }
加載模板部分內容也可以參見系統框架源碼content模塊 phpcms\modules\content content.php文件的實現。
【3】創建數據庫模型類
至此,已經明確,各模塊的數據庫模型位於:phpcms/model/ 目錄下。
數據模型文件的命名規則建議為:數據表名稱 + '_model.class.php'
如果在我們的創建的模塊中我要使用一個數據庫“test”,首先需要建立一個數據庫模型文件,文件名稱為'test_model.class.php'
內容如下:
1 <?php 2 defined('IN_PHPCMS') or exit('No permission resources.'); 3 pc_base::load_sys_class('model', '', 0); 4 class test_model extends model 5 { 6 public function __construct() 7 { 8 $this->db_config = pc_base::load_config('database'); 9 $this->db_setting = 'default'; 10 $this->table_name = 'test'; 11 parent::__construct(); 12 } 13 } 14 ?>
書寫數據庫模型類注意一下幾點:
1. 數據庫模型類名稱必須與文件名稱相同。
2. 必須繼承與數據庫模型基類model。
3. $this->db_setting = 'default'為數據庫配置文件中配置數據庫鏈接池名稱,默認為default,一般情況下不需要修改。
4. $this->table_name = 'test'為數據表名稱。
這樣我們就建立好一個數據庫模型類。那麼,怎麼使用呢?
在模塊的控制器中使用(加載方式):
$this->db = pc_base::load_model('test_model');
具體如下:
1 <?php 2 defined('IN_PHPCMS') or exit('No permission resources.'); 3 class mytest 4 { 5 private $db; 6 function __construct() 7 { 8 $this->db = pc_base::load_model('test_model'); // 加載數據庫模型 9 } 10 public function init() 11 { 12 $myvar = 'hello world!'; 13 echo $myvar; 14 include template('test', 'index'); 15 $result = $this->db->select(); // 調用select方法 16 var_dump($result); 17 } 18 public function mylist() 19 { 20 $myvar = 'hello world! This is an example!'; 21 echo $myvar; 22 } 23 } 24 ?>
其中$this->db中所支持的方法請參照父類 phpcms/libs/classes/model.class.php 中方法。