爲phpcms建立一個模塊的開發流程php
【1】建立模塊目錄html
經過前面的學習,咱們已經知道phpcms V9框架中的模塊位於phcms/modules目錄中,每個目錄稱之爲一個模塊。數據庫
若是要建立一個模塊,只要在 phpcms/modules 目錄下建立文件夾並放入你的控制器類就能夠了。app
例如我要開發一個叫作test的模塊,那麼首先在 phpcms/modules 目錄下建立文件夾,並將其命名爲test。框架
觀察其餘模塊的結構,可知test模塊的標準結構一般應該也是這樣的:函數
classes 爲模塊類庫包學習
functions 爲模塊函數庫包this
templates 爲模塊模板包,一般放置含有權限控制的控制器模板,也就是後臺模板。spa
若是你的模板有自定義的前臺模板,你須要在phpcms\templates\default目錄下建立一個你的模塊名目錄來放置前臺模板,「default」爲你的風格包名稱,咱們默認是用default。code
【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 中方法。
Good Good Study, Day Day Up.
順序 選擇 循環 總結