【抛砖引玉】LaySNS插件的使用与开发

编程语言
0 1040

一、插件安装使用

1、下载源码包,解压后放到 /addons文件夹中

2、进入网站管理后台 http://xxxx/admin.php,扩展管理->插件管理。点击安装即可

QQ截图20180313101024

安装完成后,该插件会在数据库中的addons表和hooks表分别写入插件信息和插件拥有的钩子信息;

QQ截图20180313102036

QQ截图20180313102240

3、在模板中合适的位置添加钩子(以友情链接插件为例)

{:hook('friendlinkshow')}

这里的friendlinkshow钩子调用方法,一般作为开发者会写在该插件的使用方法中

QQ截图20180313101741

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这个方法中处理后面这个数组。