B3log Solo 插件机制

版本:0.1.0Oct 29, 2011

作者:88250Vanessa

B3log Solo 插件机制

概述

插件定义

适用场景

插件机制

设计原理

服务端

客户端

关键点

安全性

详细设计

服务端

类图

时序图

客户端

资源构成

附录

术语表

概述

插件定义

运行在 B3log Solo 上完整实现了某独立功能的组件,包含视图(FreeMarker 模版)、控制器、模型(JSON、lang props)这三个基本要素。

适用场景

插件主要用于 B3log Solo 功能特性实现。建议插件进行后台功能实现,因为前台展现部分可能会与特定皮肤耦合。

插件机制

设计原理

下图为“偏好设定”插件示例:

服务端

服务端主要负责插件查找,然后调用模板引擎处理插件视图模版,并将处理结果添加到已有视图模版变量 ${plugins} 中。

客户端

在服务端生成视图 HTML 返回至客户端后,插件视图中的 JavaScript($(function(){...});)将在客户端完成插件 DOM 元素与已有元素的调整合并,及进行插件视图定位

同一寄主模版可以存在多个插件,但它们之间不能出现相互的直接的依赖(JavaScript functions),因为插件模版在服务端处理时是无序的,在客户端也就不能确定某客户端插件 JS 函数一定在其他插件 JS 函数前。

关键点

安全性

主要是针对插件实现的功能是否存存在不安全因素,例如删除、篡改用户数据。由于插件大多数由第三方开发,目前尚未找到有效解决方式应对潜在的安全问题。

详细设计

服务端

时序图

客户端

客户端需要提供 JavaScript 函数及相应的机制用于客户端插的件定位和方法的回调:

加载过程

方法

admin.plugin.add({});

参数

类型

说明

id

string

插件唯一标识。

插件的变量与方法需放到 plugins[id] 命名空间下。

添加新页面时,做为 URL 后缀。

path

string

插件添加的位置。

添加新页面,有特定的 URL。地址为 “/admin-index.do#” + path.replace("/", "") + "/" + id

/

/article

/tools

/tools/preference

添加到特定页面下。

/main/panel1

/article/article | article-list | draft-list

/comment-list

/tools/preference | file-list | page-list | link-list | user-list | plugin-list | others

/tools/preference/preferences | skins | sings | tencent

content

string

添加内容。

[text]

string

添加新页面的标题。

[index]

int

添加新页面,标题所在位置的顺序,从1开始。

资源构成

将所有插件相关资源放到到一个目录中,其中应该包含如下文件:

使用时将此目录放置于 ${webRoot}/plugins/ 下,类文件放置于 plugin.properties 里的 classesDirPath 值指定的目录

附录

术语表

术语

含义

寄主/寄主模版

插件主视图要插入的模版

事件/事件机制

B3log Latke 事件处理框架,观察者模式

插件主视图

文件名为 plugin.ftl 的模版,插件模版处理将从该模版进行