> 插件是用于扩展系统的功能的一些独立“组件”。
插件的定位是用于实现某些简单的显示及数据处理的功能扩展。所以我们的初衷是插件的开启关闭,不会影响原有数据。 为了管理的方便,我们在后台给插件默认提供了插件列表页,用于插件的安装、卸载、设置、插件后台等功能。
**本文的适用于对ThinkPHP3.2.3版本行为扩展机制有一定了解的开发者。**
**插件结构**
插件目录位于Addons。 解耦如下:
插件目录如下:
~~~
Addons 系统插件目录
├─Demo Demo插件目录
│ │ ├─Controller 前台控制器目录
│ │ │ ├─DemoController.class.php 用户控制器
│ │ ├─Model 模型目录
│ │ │ ├─DemoModel.class.php 用户模型
│ │ ├─TagLib 前台标签库目录
│ │ └─View 模块视图文件目录
│ │ └─Sql SQL文件目录
│ │ │ ├─install.sql 安装sql文件
│ │ │ ├─uninstall.sql 安装sql文件
│ │ ├─DemoAddon.class.php 用户模块配置文件(独立于TP的配置文件)
~~~
**插件配置**
插件配置位于插件目录的config.php文件中: 数组的key即为配置的名称
> title:显示名称
> type:配置值类型,可参考FormBuilder支持的类型。常用类型有:text,array,toggle,select等
> options:选项。一般用于select、toggle、radio设置数据源
> value:默认值
~~~
return array(
'status' => array(
'title' => '是否开启:',
'type' => 'radio',
'options' => array(
'1' => '开启',
'0' => '关闭',
),
),
'text' => array(
'title' => '提示信息',
'type' => 'text',
'value' => '这是提示信息!',
),
'time' => array(
'title' => '自动关闭时间',
'type' => 'num',
'value' => '3000',
),
);
~~~
**命名空间**
插件控制器命名空间为:Addons/插件名/Controller 插件模型命名空间为:Addons/插件名/Model 注意:控制器和模型并不是插件必须的。
插件类
DemoAddon.class.php该文件需继承Common\Controller\Addon; 该类提供了getConfig()方法用于获取插件配置 特别注意:例子中的PageFooter()方法需与挂在的钩子名称一致。示例中的PageFooter()使用了视图并调用了$this->display()方法,因此在钩子位置会输出该插件渲染的html。当然,插件并不一定要输出html。 自定义插件后台列表: 设置$custom_adminlist即可(可参考以下文件)
~~~
namespace Addons\Demo;
use Common\Controller\Addon;
/**
* 在线留言插件
* @author jry 598821125@qq.com
*/
class EnquiryAddon extends Addon
{
/**
* 插件信息
* @author jry <598821125@qq.com>
*/
public $info = array(
'name' => 'Demo',
'title' => 'Demo插件',
'description' => 'Demo插件',
'status' => 1,
'author' => 'Demo',
'version' => '1.6.0',
'icon' => 'fa fa-wechat',
'icon_color' => '#5E5DCA',
);
/**
* 自定义插件后台
* @author jry <598821125@qq.com>
*/
public $custom_adminlist = 'Demo://Demo/index';
//挂载自定义钩子
$hooks=array(
'0'=>'myHook',
);
/**
* 插件安装方法
* @author jry <598821125@qq.com>
*/
public function install()
{
return true;
}
/**
* 插件卸载方法
* @author jry <598821125@qq.com>
*/
public function uninstall()
{
return true;
}
/**
* 钩子方法
* @author jry <598821125@qq.com>
*/
public function PageFooter($param)
{
$config = $this->getConfig();
$this->assign('config', $config);
if ($config['status']) {
$this->display('index');
}
}
~~~
框架提供的方法和常量
~~~
__ADDONROOT__ :插件目录。在Demo插件的视图文件中通过它即可定位到Addons/Demo目录
D('Addons://插件名/模型名'):实例化相应插件模型
addons_url('插件名://控制器名/方法名'):生成相应插件控制器的url,一般用于前端。
~~~
- 序言
- 基础
- 安装
- 开发规范
- 目录结构
- 表单生成器
- setMetaTitle
- setTabNav
- setExtraItems
- setPostUrl
- addFormItem
- setFormData
- setExtraHtml
- setAjaxSubmit
- setTemplate
- 表格生成器
- setMetaTitle
- addTopButton
- addTableColumn
- setTableDataList
- setTableDataListKey
- addRightButton
- setTableDataPage
- setSearch
- setTabNav
- addSearchItem
- alterTableData
- setExtraHtml
- setTemplate
- 公共函数
- 后台管理
- 系统功能
- 系统设置
- 导航管理
- 幻灯管理
- 配置管理
- 上传管理
- 用户权限
- 用户管理
- 管理员管理
- 用户组管理
- 扩展中心
- 功能模块
- 插件管理
- 模块
- opencmf.php
- 目录结构
- 开发规范
- 插件
- 系统钩子列表
- 插件开发
- 主题
- 新建主题
- 模板变量
- 模板标签
- 附录
- 网站配置
- 常见问题
- 更新日志
- 关于零云