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.

顺序 选择 循环 总结