phpcms V9 添加模块(转)

Posted 永远的麦田

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了phpcms V9 添加模块(转)相关的知识,希望对你有一定的参考价值。

转自: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 中方法。

以上是关于phpcms V9 添加模块(转)的主要内容,如果未能解决你的问题,请参考以下文章

phpcmsphpcms V9 MVC模式 与 URL访问解析(转)

PHPCMS V9 学习总结(转)

phpcms v9中如何设置点击一级栏目直接跳转到二级栏目?

PHPCMS 使用图示和PHPCMS二次开发教程(转)

如何对phpcms v9的首页列表进行分页

Phpcms V9手机门户设置教程:怎么用PC V9做手机网站