一、插件安装使用
1、下载源码包,解压后放到 /addons文件夹中
2、进入网站管理后台 http://xxxx/admin.php,扩展管理->插件管理。点击安装即可
安装完成后,该插件会在数据库中的addons表和hooks表分别写入插件信息和插件拥有的钩子信息;
3、在模板中合适的位置添加钩子(以友情链接插件为例)
{:hook('friendlinkshow')}
这里的friendlinkshow钩子调用方法,一般作为开发者会写在该插件的使用方法中
V2.2.0以上版本的源码,友情链接的钩子在程序模板中已经添加,位置:
template/default/index_right.html
4、在控制器中合适的位置添加钩子
在控制器中添加插件的相关钩子,是为了在执行程序的过程中先执行插件的相关方法,达到对内容先一步进行处理的目的。
我们可以直接使用
hook('钩子名称') 就可以了。
二、插件开发
1、开发之前,我们先熟悉一下插件的目录结构。
插件目录位于根目录addons文件夹下,每个插件都应包括如下文件及目录
> ├─controller 控制器目录
> -----└─插件控制器文件
> ├─model 模型目录
> ------└─插件模型文件
> ├─static 资源目录
> ├─view 基础布局文件
> ├─adminlist.html 后台管理页面
> ├─插件功能.php 安装卸载及插件钩子相应方法文件
> ├─config.php 配置文件
> ├─install.sql 安装插件数据库所需文件
> ├─uninstall.sql 卸载插件数据库所需文件
接下来我们会一个个的理解和解读这些文件及目录下的文件作用。
2、以友情链接插件为例讲解
首先我们看到上面引用及命名空间,不多介绍,照猫画虎就行。
接下来首先我们要写上插件的相关信息,放到info这个数组中。包括
name【全部名称字母表示并且小写】,
title【插件名称,可为中文】
description【插件描述】,
status【一般为1,表示可用】,
author【作者信息】
version【版本号】
接下来是$admin_list
如果你在后台需要展示插件的数据,或者有相关的增删改查操作,则需要配置该数组,数组中配置需要显示的字段及对应名称。下面还可以设置如何排序,模型使用的是什么
接下来我们需要设置的就是
public $custom_adminlist = 'adminlist.html';
表示后台显示用插件自身的模板,而不是系统提供的通用后台插件模板
adminlist.html这个文件也存在于插件目录,后面我们会说到这个文件。
现在我们就要写上安装和卸载方法了,默认在插件安装时,如果不需要安装数据库,可以直接return true;如果需要安装数据库,那么我们就需要按照友情链接插件的这种写法,并且在插件根目录放install.sql文件。
这时候需要特别强调一点:
开发插件必须开发钩子,这时候我们需要填上一句话
$this->getisHook('showfriendlink', $this->info['name'], $this->info['description']);
可以看到第一个参数就是我们的钩子名称,后面的是我们的插件名称和描述。
如果钩子名称使用了“showfriendlink”,那么我们在安装和卸载插件后,必须要有个function showfriendlink()这个方法作为插件钩子方法来在前台调用。
也就是
hook('showfriendlink')
### 强调的另外一个问题就是卸载方法。
如果你想在卸载插件的时候就卸载插件的数据库,那么就在插件根目录放上一个uninstall.sql,里面放上sql语句,如``DROP TABLE IF EXISTS ls_superlinks;
如果你不想在卸载时删除插件已经存在的各类数据,毕竟数据不易。那么在卸载方法里直接填写return true 也是可以的。
我们现在重点说一下钩子方法的写法和重要性。
我们都知道,前台可以放钩子的地方很多,可以放在控制器里作为一种功能代码使用,也可以放在模板html的文件中做为一种展示使用。
如果是作为展示,那么我们就需要像友情插件这种,在钩子里最后写上 echo $this->tplfetch('widget'); 来调用插件模板,这个模板文件就存在view这个文件夹里,你可以对应多个模板,然后用变量改变调用的时候使用的模板。
widget表示文件名称。如果不需要展示,而是写在控制器和其他方法里调用,那么就无需写上这句话,直接处理相关的数据即可。
例如(附件连接插件):
$res = hook('attachlinksave', array('score' => $data['attachscore'], 'linkinfo' => $data['linkinfo'], 'id' => $forum->id, 'otherinfo' => $data['otherinfo'],'edit' => 0, 'type' => 2));
这就是说 ,我们可以在钩子attachlinksave这个方法中处理后面这个数组。