基于 AnyPlugin 实现对任意内容的 HTML 展示
为了基于 AnyPlugin 实现对任意内容的 HTML 展示,我们需要以下几个步骤
- 创建一个新的 .cc/.cpp/.cxx 文件(在你想要的位置);
- 定义 AnyPlugin 的派生类;
- 在派生类中实现两个 AnyPlugin 中的纯虚函数;
- 注册插件;
- 重新编译项目;
- 修改 json 文件;
- 运行项目,即可在浏览器中看到我们展示的内容。
- 进阶:以表格的形式展示 json 文件。
1. 创建一个新的 .cc/.cpp/.cxx 文件
在我们想的一个位置,新建一个 .cc/.cpp/.cxx 文件,用于编写我们的 HTML 展示插件。
在这个示例中,我们新建一个 HtmlShowExample.cc
文件。
加载我们会用到的头文件 #include "topling/side_plugin_factory.h"
。
2. 定义 AnyPlugin 的派生类
AnyPlugin 是一个纯抽象类,其中包括 Update 和 ToSring 两个函数需要派生类实现。
首先我们定义一个 AnyPlugin 的派生类 HtmlShowExample,并且实现其的两个纯虚函数如下:
1 |
|
注意
- 在我们实现 HTML 展示时,不会用到 Update 函数,但是依然需要将其定义出,且为空。
- 在 ToString 函数中,我们仅需要传入其第一个参数 dump_options,但我们可以不对这个参数做任何操作。
3. 在派生类中实现两个 AnyPlugin 中的纯虚函数
Update 函数在此处不会用到,定义为空,我们不再理会,下面说 ToString 函数。
ToString 函数的返回值是 std::string 类型,其返回的 string 字符串,会被无差别地打印在浏览器中。
我们修改上面的 ToString 函数如下:
1 | std::string ToString(const json& dump_options, const SidePluginRepo&) const { |
这样,我们就实现了一个简单的 HTML 展示插件。
4. 注册插件
在 HtmlShowExample.cc
文件的末尾,topling 的 namespace 内,输入下面的代码:
1 | ROCKSDB_REG_DEFAULT_CONS(HtmlShowExample, AnyPlugin); |
ROCKSDB_REG_DEFAULT_CONS(param1, param2, param3)
: 此宏适用于没有用到(const json&, const SidePluginRepo&)
构造参数的派生类。param1
: 即将在 json 中写入的插件注册名字,string 类型,需要加双引号。param2
: 即将在 json 中写入的插件注册类名。param3
: 填入父类,这里是 AnyPlugin。- 注:如果
param1
和param2
的值是相同的,则可以省略param1
,如上代码所示。
ROCKSDB_REG_AnyPluginManip(param1)
: 用于注册派生于 AnyPlugin 类的插件。- 参数为即将在 json 中写入的插件注册名字,即与
ROCKSDB_REG_DEFAULT_CONS
的param1
相同。
- 参数为即将在 json 中写入的插件注册名字,即与
5. 重新编译项目
首先,我们需要把我们自定义的 HtmlShowExample.cc
添加到编译文件中,可能是 CmakeLists.txt,可能是 Makefile,也可能是一个编译脚本,这取决于你的项目的编译方法。然后,重新编译项目。
6. 修改 json 文件
找到我们的 [[Home]],添加字段
1 | "AnyPlugin": { |
AnyPlugin
: 我们插件继承的抽象类名。html-show-example
: 我们插件对象的变量名。HtmlShowExample
: 在 json 中写入的插件注册名字,与上述ROCKSDB_REG_DEFAULT_CONS
的param1
相同。
7. 运行项目
运行编译后的项目,在浏览器中输入
192.168.31.2:8088/AnyPlugin/html-show-example
即可看到浏览器打印出了我们代码中 ToString 函数返回的值 “This is an example of HTML show.”。
192.168.31.2:8088
: 我们数据库的地址与监听端口,监听端口号在 json 配置文件的http
字段中的listening_ports
字段中设定。AnyPlugin
: 我们使用的抽象类。html-show-example
: 我们插件对象的变量名。
8. 进阶:以表格的形式展示 json 文件
直接展示 string 文件的可读性是很差的,我们可以把需要展示的配置项,存到一个 json 对象中,并通过 JsonToString
函数,将 json 对象中的内容,以表格的形式打印到浏览器中。
修改我们之前的 ToString 函数代码,其他部分保持不变。
1 | std::string ToString(const json& dump_options, const SidePluginRepo&) const { |
运行编译后的项目,在浏览器中输入
192.168.31.2:8088/AnyPlugin/html-show-example?html=1
html=1
:url 参数,表示将展示内容以表格的形式打印。
关于更多 url 参数信息、HTML 展示信息,查看文档 [[WebView]]。
现在,我们可以在浏览器中看到,我们以表格形式输出的内容了。