查看: 51|回复: 0

Xiuno插件开发手册(AI 开发指导)

[复制链接]

8

主题

1

回帖

26

积分

新手上路

积分
26
发表于 2026-3-4 21:31:34 | 显示全部楼层 |阅读模式
  1. 根据我获取到的内容,让我为你整理Xiuno插件开发手册的核心内容:

  2. ## Xiuno BBS 插件开发手册

  3. ### 一、核心概念

  4. #### 1. MVC 分层架构
  5. Xiuno BBS 采用MVC设计模式:

  6. - **Model (模型)**:处理数据,如从数据库读取或保存数据
  7. - **View (视图)**:用户界面,通常指HTML内容
  8. - **Controller (控制器)**:控制逻辑,接收用户请求并调用相应模型方法

  9. **目录对应关系**:
  10. - `route/` - Controller层(路由控制器)
  11. - `model/` - Model层(数据处理)
  12. - `view/` - View层(HTML/CSS/JS等显示文件)

  13. #### 2. AOP 面向切面编程
  14. Xiuno BBS 通过Hook机制实现AOP,允许在不修改原有代码的情况下插入额外功能。

  15. **工作原理**:
  16. 1. 系统加载页面时,检查所有插件hook文件夹中是否存在与hook点注释对应的文件
  17. 2. 如果存在,将文件中的代码插入到原始文件的hook点注释处
  18. 3. 将合并后的代码保存到tmp文件夹中
  19. 4. 几乎所有代码都在tmp文件夹中运行

  20. **Hook点示例**:
  21. ```html
  22. <!--{hook index_site_brief_before.htm}-->
  23. ```

  24. 当你的插件hook文件夹中有`index_site_brief_before.htm`文件时,其内容会自动插入到这个位置。

  25. ### 二、插件机制

  26. Xiuno BBS 提供两种插件机制:

  27. #### 1. Hook 机制(插入代码)
  28. - 往代码里插入代码
  29. - 多个插件的代码合并后插入到hook指定的位置
  30. - 生成的代码存放在tmp目录

  31. #### 2. Overwrite 机制(覆盖文件)
  32. - 覆盖原来的文件
  33. - 插件目录结构示例:
  34. ```
  35. plugin/my_plugin/
  36. ├── conf.json          # 配置文件
  37. ├── icon.png           # 图标(54x54)
  38. ├── hook/              # Hook文件目录
  39. │   └── index_route_case_end.php
  40. └── overwrite/         # 覆盖文件目录
  41.     └── view/htm/
  42.         └── header.inc.htm
  43. ```

  44. ### 三、插件目录结构

  45. 一个完整的插件目录结构:
  46. ```
  47. plugin/my_plugin/
  48. ├── conf.json          # 插件配置文件
  49. ├── icon.png           # 插件图标(54x54像素)
  50. ├── hook/              # Hook文件目录
  51. │   ├── index_route_case_end.php
  52. │   └── index_site_brief_before.htm
  53. ├── overwrite/         # 覆盖文件目录
  54. │   └── view/htm/
  55. │       └── header.inc.htm
  56. └── route/             # 路由文件目录(可选)
  57. ```

  58. ### 四、插件配置文件 (conf.json)

  59. 配置文件格式示例:
  60. ```json
  61. {
  62.     "name": "插件名称",
  63.     "brief": "插件简介",
  64.     "version": "1.0",
  65.     "author": "作者名"
  66. }
  67. ```

  68. ### 五、插件命名规范

  69. 插件名通过下划线分割:
  70. - 第一个单词:插件作者名缩写
  71. - 第二个单词:功能名称(唯一标志)
  72. - 第三个单词(可选):额外标志

  73. **互相卸载机制**:
  74. - 相同功能名称的插件只能安装一个
  75. - 安装新插件时,会自动卸载同功能名的旧插件
  76. - 风格插件也只能安装一个

  77. ### 六、数据库操作函数

  78. Xiuno BBS 封装了数据库操作函数:

  79. ```php
  80. // 查询单条记录
  81. db_sql_find_one($sql, $d = NULL);

  82. // 查询多条记录
  83. db_sql_find($sql, $key = NULL, $d = NULL);

  84. // 执行SQL语句
  85. db_exec($sql, $d = NULL);

  86. // 计算记录数
  87. db_count($table, $cond = array(), $d = NULL);

  88. // 获取最大ID
  89. db_maxid($table, $field, $cond = array(), $d = NULL);

  90. // 插入记录
  91. db_insert($table, $arr, $d = NULL);

  92. // 替换记录(存在则更新,不存在则插入)
  93. db_replace($table, $arr, $d = NULL);

  94. // 更新记录
  95. db_update($table, $cond, $update, $d = NULL);

  96. // 删除记录
  97. db_delete($table, $cond, $d = NULL);
  98. ```

  99. ### 七、开发实例

  100. #### 创建一个单页插件

  101. 1. 创建插件目录:
  102. ```
  103. plugin/my_plugin/
  104. ```

  105. 2. 创建必要文件:
  106. - `conf.json` - 配置文件
  107. - `icon.png` - 图标(54x54)
  108. - `hook/index_route_case_end.php` - 路由hook

  109. 3. 在hook文件中添加路由逻辑:
  110. ```php
  111. <?php
  112. case 'my_page':
  113.     include _include(APP_PATH.'plugin/my_plugin/my_page.php');
  114.     break;
  115. ```

  116. 4. 创建页面文件 `my_page.php`

  117. ### 八、重要提示

  118. 1. **使用_include函数**:必须使用`_include()`而不是`include()`来引入文件
  119. 2. **清除缓存**:遇到"玄学问题"时,可以点击后台"其他"里的"清除缓存"
  120. 3. **JSON输出**:在请求参数中加上`ajax=1`即可输出JSON数据(可能需要安装官方API插件)
  121. 4. **单入口设计**:所有请求都通过`index.php`处理

  122. 这就是Xiuno BBS插件开发的核心内容。需要我详细解释某个部分吗?
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|青ICP备2025004122号-1

在本版发帖
关注公众号
返回顶部