插件是存储在nvPress根目录/nv-plugins
文件夹中的,为便于开发,本文以开发版为例进行讲解。
::: tip
对于Docker而言,是被映射出来的插件目录,在运行时应该将 /usr/src/app/nv-plugins
文件夹映射到本地。
:::
一个插件至少包含2个部分:
- plugin.json 插件基础资料
- function.js 为插件添加一些特性和功能,您可以使用它来调用 nvPress 内置函数或定义自己的函数
下面,为讲解插件使用,我们利用nvPress自带的Socket API来实现一个聊天室。
聊天室插件示例
我们要实现这个聊天室,首先要按照上面的要求创建插件的结构:
插件文件夹
将您的资源管理器定位到 nvPress根目录/nv-plugins
,新建文件夹,==文件夹名称使用英文小写+短横线或下划线形式,不要使用空格或其他特殊符号==。例如:pandastudio-chatting_room
plugin.json
在插件文件夹中新建plugin.json
文件,内容编写如下:
{
"name": "示例插件:聊天室",
"url": "",
"description": "Socket API用法示例,启用插件后,在网站 /chatting-room 页面体验",
"version": "0.0.1",
"author": "PANDA Studio",
"author_url": "",
"update_excludes": ["sample_file.js","sample_directory"]
}
说明
- name:插件名称
- url:将会在后台-插件作为链接存在,可以是插件demo也可以是插件介绍页面
- description:插件简要描述
- version:版本号
- author:作者
- author_url:作者链接
- update_excludes:更新时,保留根目录中指定的文件夹/文件夹
function.js
在插件文件夹中新建function.js
空文件,插件的接口、钩子、配置都会在这里编写。
至此,我们已经得到了基础的插件结构:
nvPress主目录
├ nvpress
├ packages
├ nv-admin
├ nv-content
├ nv-themes
└ nv-plugins
└ chatting_room
├ function.js
└ plugin.json
由于这个插件需要有一个独立的页面来呈现聊天室,因此还需要在该文件中新增一个前台访问文件夹(web),并指定一个url(/chatting-room)地址。我们在 function.js
文件中来注册它:
var path = require('path');
// 在 init_express 钩子调用的时候操作:
add_action('init_express',()=>{
// 为聊天室注册一个前台访问页面文件夹
register_static_url('/chatting-room', path.join(__dirname,"./web/") );
// 访问页面可以直接跳转到index.html
add_filter('rewrite_rules_array',arr=>{
arr.push({
from: /\/chatting-room/, to: '/chatting-room/index.html'
})
return arr;
});
});
这样,在前台访问 localhost:8081/chatting-room 的时候,就会访问到插件目录下的web文件夹了
调试
::: tip
重启nvPress服务,进入后台-插件,启用刚才新建的“示例插件:聊天室”,等待5秒后重启服务。再次登录到后台-插件,可以看到插件已经成功启用。
::: tip 为什么要等5秒?
nvPress的数据写入有延迟写入特性:为防止数据在短时间内发生连续多次的写入影响硬盘性能,在上一次写入后的5秒内,若有再次修改,则延缓5秒后再统一写入数据文件。
因此,为保证数据成功修改到数据文件,需至少5秒后再重启服务,以免数据丢失。
:::