Xiuno BBS的插件机制分为两种,一种是Hook,一种是Overwrite。
尽量使用 hook,而少用 overwrite(一般 overwrite 一下首页),这样就不怕主程序变动。
所谓Hook,就是往代码里插入代码,多个插件的代码合并后插入到hook指定的位置,最后生成的代码存放于tmp目录,被include。
在 插件示例 中的实例就是基于 Hook 的
文件 view/htm/header.inc.htm 中的代码,包含一个 hook header_body_start.htm,我们来将代码插 入到此处:
...
<body>
<!--{hook header_body_start.htm}-->
<div id="wrapper">
...
制作插件 A:
plugin/
my_plugin_a/
conf.json
hook/
header_body_start.htm
假定 header_body_start.htm 的内容为:
Hello, Pugin A
有插件 B:
plugin/
my_plugin_B/
conf.json
hook/
header_body_start.htm
假定 header_body_start.htm 的内容为:
Hello, Pugin B
那么最后生成的文件位置在 tmp/view_htm_header_body_start.htm,内容为:
...
<body>
Hello, Pugin A
Hello, Pugin B
<div id="wrapper">
...
因为程序在 include 时候做了转换:
include _include('./view/htm/header.inc.htm');
// 基本等价于:
include ''./tmp/view_htm_header_body_start.htm;
XiunoBBS预埋了很多hook,你可以通过打开源代码查找你想插入的地方,比如view/htm/header.inc.htm中:
如果你要插入到钩子所在位置,只需要在你所在的插件目录的hook目录下,建立同名文件即可。
比较常见的几个文件:
view/htm/header.inc.htm 头部模板文件
view/htm/footer.inc.htm 页脚模板文件
view/htm/index.htm 首页模板文件
view/htm/forum.htm 列表页模板文件
view/htm/thread.htm 详情页模板文件
view/htm/post.htm 发帖模板页面
route/index.php 首 页
route/forum.php 列表页
route/thread.php 详情页
route/post.php 发帖页