编写插件


主文件

文件名必须为 .class.php 为后缀,文件名可以和目录同名,也由描述文件中的 class 项定义。如:

  1. return array(
  2. 'name' => 'Hello', //插件名称, 推荐使用英文、数字、下划线
  3. 'class' => 'Hello', //类名称, 只能为英文、数字、下划线
  4. ...
  5. );

实际文件名为 hello.class.php。该文件必须包含一个类,名称与文件名相同,类名应当注意是否重名。

示例代码

  1. namespace extend\plugin\hello;
  2. use ginkgo\Plugin;
  3. if (!class_exists('extend\plugin\hello\Hello')) { // 防止类重复
  4. class Hello {
  5. public $config = array();
  6. public $opts = array();
  7. function __construct() {
  8. // 定义动作
  9. // 第一个参数是 钩子 的名称
  10. // 第二个参数是 对象名 必须为本类
  11. // 第三个是插件所执行的 方法(函数)
  12. Plugin::add('action_console_menu_plugin', $this, 'sayHello');
  13. }
  14. //参数由 listen 侦听方法所传递过来
  15. function sayHello($param) {
  16. //echo '<div>test</div>';
  17. $param = str_ireplace('__baigo__', 'BAIGO', $param);
  18. return $param;
  19. }
  20. }
  21. }

定义动作

可以使用 ginkgo\Plugin 类的 add 方法向指定的钩子添加动作,此方法一般用于插件中,例如:

  1. namespace extend\plugin\hello;
  2. use ginkgo\Plugin;
  3. class Hello {
  4. function __construct() {
  5. Plugin::add('action_console_menu_plugin', $this, 'sayHello'); // 单个定义
  6. Plugin::add('action_console_menu_plugin', $this, array('doHello', 'testHello')); // 批量定义
  7. }
  8. function sayHello($param) {
  9. return $param;
  10. }
  11. function doHello($param) {
  12. return $param;
  13. }
  14. function testHello($param) {
  15. return $param;
  16. }
  17. }

插件属性

插件类中可以定义 config 与 opts 属性,必须声明为 public,系统在初始化插件时,会自动读取 config.inc.phpopts.json 文件,并将值定义为插件类的属性,如:

  1. namespace extend\plugin\hello;
  2. use ginkgo\Plugin;
  3. class Hello {
  4. public $config;
  5. public $opts;
  6. function __construct() {
  7. Plugin::add('action_console_menu_plugin', $this, 'sayHello'); // 单个定义
  8. }
  9. function sayHello($param) {
  10. print_r($this->config);
  11. }
  12. }

描述文件

文件名必须为 config.inc.php,此文件直接返回数组,如:

  1. return array(
  2. 'name' => 'Hello', //插件名称, 推荐使用英文、数字、下划线
  3. 'class' => 'Hello', //类名称, 只能为英文、数字、下划线
  4. 'version' => '1.0', //版本
  5. 'author' => 'Baigo', //作者
  6. 'plugin_url' => 'http://www.baigo.net/cms/plugin/hello', //插件地址
  7. 'detail' => '本插件为一个开发示例', //说明
  8. 'author_url' => 'http://www.baigo.net', //作者地址
  9. );

说明如下

键名 描述
name 插件的名称。
class 类名,安装插件以后,系统会自动实例化该类。
version 版本
author 作者
detail 说明
plugin_url 插件网址,由该开发者自行设立,介绍插件的使用方法等。
author_url 作者网址,由该开发者自行设立,介绍作者等。