JPWRT插件开发基础
发布时间: 2021年5月9日 下午5:50 作者: JPWRT 访问量: 869

我们在《JPWRT插件文件的位置》一文里面介绍了JPWRT插件开发的最基本常识,就是插件应该放在哪里。这一篇我们来继续学习插件开发,当然我们还是从最基础开始,我们来看一下怎么生成插件文件以及插件文件里面的最基本的代码该怎么样。

在开始之前我们来看JPWRT系统自带的插件“notice”,这个插件的作用是在首页输出一个通知信息,通知的内容可以在后台填写。我们从前面的学习中已经知道了插件的位置是“app/plugins”目录里面,我们可以在这个目录里面找到“notice”插件,然后可以打开这个插件目录,如下图:


上图所示就是插件“notice”里面的文件结构,我们可以看到一个“lang”文件夹,一个“Notice.php”文件,以及一个“readme.txt”文件。

这里的“Notice.php”文件是插件“notice”的主文件,我们仔细观察这个文件,可以发现,这个文件的名称实际是跟插件目录“notice”是一样的,区别仅仅是首字母大写。从这里的观察我们已经知道了,插件主文件是跟插件目录同名的,并且主文件的第一个字母要大写。

“lang”目录是语言包文件夹,我们如果要制作多语言插件的话,可以制作语言包,并且把语言包文件放到这个目录里面。

“readme.txt”文件是插件说明文件,我们在制作插件时,都需要带上这个文件,文件的内容是关于插件的说明。

我们这里主要来看一下主文件“Notice.php”,可以打开这个文件:

namespace app\plugins\notice;
use app\general\Plugin;
use jsnpp\Controller;
class Notice extends Controller
{
private $notice = 'notice_content';
public function open()
{
Plugin::setVal($this->notice, '');
}
public function close()
{
Plugin::delVal($this->notice);
}
public function general()
{
$notice = Plugin::getVal($this->notice);
if(!empty($notice)){
$this->view->appendAssign('homeTop', '<div style="background-color: #ffffff;margin-bottom: 10px;padding: 10px">' . $notice . '</div>');
}
}
public function assign()
{
$this->view->assign('notice', Plugin::getVal($this->notice));
}
public function addPlugin()
{
Plugin::set('', 'notice', $this->lang->translate('Notice'), $this->html());
}
private function html()
{
return '<div class="h3 mb-3">{lang("Notice")}</div>
<form method="post">
<div class="form-group">
<label for="content">{lang("Content")}</label>
<textarea class="form-control" id="content" name="content" rows="5">{$notice}</textarea>
</div>
<button type="submit" class="btn btn-outline-success">{lang("Submit")}</button>
</form>';
}
public function post($param)
{
Plugin::setVal($this->notice, $param['content']);
}
}

我们上面贴出了这个插件的全部代码,我们大致来看一下插件代码的结构。

最上面的代码“namespace app\plugins\notice;”是名称空间,这里的名称空间您观察一下,实际就是插件文件所在的路径。

接下来是两个“use”语句,这里的“use”语句是根据下面代码需要而加的,一般情况下,“use jsnpp\Controller;”这行代码是需要的,因为我们通常会建议您的插件类继承自控制器超类。通常“use app\general\Plugin;”这行也是需要的,因为实际的插件代码里面基本都会用到插件类相关方法。

再接下去的“class Notice extends Controller”代码是定义了“Notice”类,并且这个类继承自超类“Controller”,这也是前面要使用“use jsnpp\Controller;”的原因。

在插件类里面是一些方法,例如“open”,“close”等。下面我们来简单说明几个主要的方法。

“open”方法是插件开启时要执行的代码,如果您在开启插件时需要执行一些初始化的工作,那么可以在这里写上对应代码。

“close”方法用于插件关闭时执行的代码,如果您在关闭插件时需要做一些清理工作,那么可以在这里写上对应的代码。

“general”方法是用于对前端页面做的一些处理工作,在这个例子里面就是把通知内容输出。

“addPlugin”方法是用于配置后台菜单的,可以使用“Plugin::set”来进行设置。

这一篇教程我们通过系统自带的插件“notice”来简单介绍了插件文件名的规则以及插件文件代码的基本结构,有了这个基础后才可以更进一步学习JPWRT的插件制作。

出错
提交成功!
评论已经提交。
我们已经收到您的反馈!
/index/like.html
/index/dislike.html
/index/postpassword.html
JPWRT
自豪地采用 Jpwrt