phpcms V9 添加模塊

爲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.phpinit方法加載一個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.

順序 選擇 循環 總結

相關文章
相關標籤/搜索