### 说明
每个插件目录下都要有Index.php文件,因为插件中的对钩子中的实现方法都在该文件中定义。在程序代码中调用的插件钩子的具体实现方法都是在插件目录下的Index文件中实现的。
#### 下面看下Index.php文件中都有神马,代码如下:
~~~
<?php
namespace plugins\DemoExample;
use app\common\controller\Plugin;
/**
* EacooPHP演示插件
*/
class Index extends Plugin{
/**
* @var array 插件钩子
*/
public $hooks = [
'PageHeader',
'PageFooter'
];
/**
* 页面头部钩子实现
* @param [type] $param [description]
* @date 2018-01-02
* @author 心云间、凝听 <981248356@qq.com>
*/
public function PageHeader($param=null)
{
//逻辑代码...
}
/**
* 页面底部钩子实现
* @param [type] $param [description]
* @date 2018-01-02
* @author 心云间、凝听 <981248356@qq.com>
*/
public function PageFooter($param=null)
{
//逻辑代码...
}
/**
* 插件安装方法
*/
public function install(){
return true;
}
/**
* 插件卸载方法
*/
public function uninstall(){
return true;
}
}
~~~
1.从上面代码中可以看出,我们创建了两个钩子。
~~~
/**
* @var array 插件钩子
*/
public $hooks = [
'PageHeader',
'PageFooter'
];
~~~
>[info] 通过$hooks变量,数组的形式添加钩子。
2.当定义了钩子后,还需要实现钩子的功能。所以要完成以下代码:
~~~
/**
* 页面头部钩子实现
* @param [type] $param [description]
* @date 2018-01-02
* @author 心云间、凝听 <981248356@qq.com>
*/
public function PageHeader($param=null)
{
//逻辑代码...
}
/**
* 页面底部钩子实现
* @param [type] $param [description]
* @date 2018-01-02
* @author 心云间、凝听 <981248356@qq.com>
*/
public function PageFooter($param=null)
{
//逻辑代码...
}
~~~
完成钩子实现逻辑。
> [info]这样在插件安装的时候,系统会自动把钩子和插件进行绑定,插件已经安装成功,可以看数据库的hooks表中,对应的钩子是否已经和插件进行关联绑定。
3.钩子调用
既然插件已经实现了钩子的方法,那么剩下的就是在指定地方进行调用和显示。
调用钩子方法是`hook('钩子名称')`
4.监听安装和卸载方法。
从代码中,你会发现有另外两个方法:install和uninstall
- 前言
- 基础
- 安装
- 规范
- 数据库设计
- 命名规范
- 建议参考
- 架构
- 架构总览
- 目录结构
- 生命周期
- 入口文件
- 模块设计
- 插件设计
- 主题设计
- API设计
- 容器和依赖注入
- 验证器设计
- 钩子和行为设计
- 介绍
- 后台介绍
- 仪表盘
- 系统设置
- 系统设置
- 网站设置
- 前台导航菜单
- 后台导航菜单
- 配置管理
- 用户管理
- 权限管理
- 角色组
- 节点管理
- 附件管理
- 工具
- 扩展中心
- 模块
- 插件
- 主题
- 前台介绍
- API接口
- 模型层
- 定义
- 逻辑层
- 定义
- 逻辑初始化
- 服务层
- 定义
- 二次开发
- 模块开发
- 介绍
- 1.结构目录
- 2.install安装目录文件
- info.json
- options.php
- menus.php
- unstall.sql
- install.sql
- 3.安装模块
- 模块函数与全局函数
- 其他
- 插件开发
- 介绍
- 定义入口文件
- 1.结构目录
- 2.install安装目录文件
- info.json
- options.php
- menus.php
- install.sql
- unstall.sql
- 3.实现钩子方法
- 4.安装插件
- 开发使用
- 插件控制器Controller
- 插件模型Model
- 插件逻辑层Logic
- 开发总结
- 主题开发
- 介绍
- 结构目录
- install安装目录
- info.json
- 主题变量
- 模块主题化
- 插件主题化
- CSS、JS静态资源引入
- 创建模版文件
- API开发
- 通用组件
- wangeditor编辑器
- 上传
- 实战开发
- 控制器
- 验证器
- 接口
- 创建自定义模版
- 数据库操作
- 通过接口上传文件
- 构建器Builder(重要)
- 表单Form
- 设置页面标题
- 表单项(调用方式)
- 文本框text
- 隐藏域hidden
- 文本区textarea
- 时间选择器datetime
- 图片选择器picture
- 多图片选择器pictures
- 图片上传image
- 文件上传file
- wang编辑器wangeditor
- 百度富文本编辑器ueditor
- 选择项
- 添加标签栏Tab
- 自定义头部工具栏
- 表单提交处理
- 列表List
- 设置页面标题
- 添加标签栏Tab
- 高级查询
- 查询构造器
- 添加列表搜索功能
- 添加批量操作
- 自定义头部工具
- 顶部新增按钮
- 顶部批量启用
- 顶部批量禁用
- 排序Sort
- 表单验证
- 插件-Builder构建器
- 命令行
- 配置
- 扩展专题
- 轻松识别客户端信息User Agent
- 字符串
- 数组
- 钩子、插件、模块相关方法
- 时间
- 请求(request)
- 附件
- 用户信息
- 前台用户
- 后台用户
- 微信(wechat模块)
- 专题
- 插件专题
- 微信支付
- 支付宝(即时到账)
- 微信小程序专题
- 微信模块
- 日志
- 后台行为日志
- 框架日志
- 自定义日志
- 常见问题集
- 附录
- 配置参考
- 常量参考
- 变量参考
- 更新日志
- 升级指导
- 关于
- 进阶
- 分布式数据库
- 分布式缓存
- 负载均衡
- Redis
- 分库分表