|
|
- 根据我获取到的内容,让我为你整理Xiuno插件开发手册的核心内容:
- ## Xiuno BBS 插件开发手册
- ### 一、核心概念
- #### 1. MVC 分层架构
- Xiuno BBS 采用MVC设计模式:
- - **Model (模型)**:处理数据,如从数据库读取或保存数据
- - **View (视图)**:用户界面,通常指HTML内容
- - **Controller (控制器)**:控制逻辑,接收用户请求并调用相应模型方法
- **目录对应关系**:
- - `route/` - Controller层(路由控制器)
- - `model/` - Model层(数据处理)
- - `view/` - View层(HTML/CSS/JS等显示文件)
- #### 2. AOP 面向切面编程
- Xiuno BBS 通过Hook机制实现AOP,允许在不修改原有代码的情况下插入额外功能。
- **工作原理**:
- 1. 系统加载页面时,检查所有插件hook文件夹中是否存在与hook点注释对应的文件
- 2. 如果存在,将文件中的代码插入到原始文件的hook点注释处
- 3. 将合并后的代码保存到tmp文件夹中
- 4. 几乎所有代码都在tmp文件夹中运行
- **Hook点示例**:
- ```html
- <!--{hook index_site_brief_before.htm}-->
- ```
- 当你的插件hook文件夹中有`index_site_brief_before.htm`文件时,其内容会自动插入到这个位置。
- ### 二、插件机制
- Xiuno BBS 提供两种插件机制:
- #### 1. Hook 机制(插入代码)
- - 往代码里插入代码
- - 多个插件的代码合并后插入到hook指定的位置
- - 生成的代码存放在tmp目录
- #### 2. Overwrite 机制(覆盖文件)
- - 覆盖原来的文件
- - 插件目录结构示例:
- ```
- plugin/my_plugin/
- ├── conf.json # 配置文件
- ├── icon.png # 图标(54x54)
- ├── hook/ # Hook文件目录
- │ └── index_route_case_end.php
- └── overwrite/ # 覆盖文件目录
- └── view/htm/
- └── header.inc.htm
- ```
- ### 三、插件目录结构
- 一个完整的插件目录结构:
- ```
- plugin/my_plugin/
- ├── conf.json # 插件配置文件
- ├── icon.png # 插件图标(54x54像素)
- ├── hook/ # Hook文件目录
- │ ├── index_route_case_end.php
- │ └── index_site_brief_before.htm
- ├── overwrite/ # 覆盖文件目录
- │ └── view/htm/
- │ └── header.inc.htm
- └── route/ # 路由文件目录(可选)
- ```
- ### 四、插件配置文件 (conf.json)
- 配置文件格式示例:
- ```json
- {
- "name": "插件名称",
- "brief": "插件简介",
- "version": "1.0",
- "author": "作者名"
- }
- ```
- ### 五、插件命名规范
- 插件名通过下划线分割:
- - 第一个单词:插件作者名缩写
- - 第二个单词:功能名称(唯一标志)
- - 第三个单词(可选):额外标志
- **互相卸载机制**:
- - 相同功能名称的插件只能安装一个
- - 安装新插件时,会自动卸载同功能名的旧插件
- - 风格插件也只能安装一个
- ### 六、数据库操作函数
- Xiuno BBS 封装了数据库操作函数:
- ```php
- // 查询单条记录
- db_sql_find_one($sql, $d = NULL);
- // 查询多条记录
- db_sql_find($sql, $key = NULL, $d = NULL);
- // 执行SQL语句
- db_exec($sql, $d = NULL);
- // 计算记录数
- db_count($table, $cond = array(), $d = NULL);
- // 获取最大ID
- db_maxid($table, $field, $cond = array(), $d = NULL);
- // 插入记录
- db_insert($table, $arr, $d = NULL);
- // 替换记录(存在则更新,不存在则插入)
- db_replace($table, $arr, $d = NULL);
- // 更新记录
- db_update($table, $cond, $update, $d = NULL);
- // 删除记录
- db_delete($table, $cond, $d = NULL);
- ```
- ### 七、开发实例
- #### 创建一个单页插件
- 1. 创建插件目录:
- ```
- plugin/my_plugin/
- ```
- 2. 创建必要文件:
- - `conf.json` - 配置文件
- - `icon.png` - 图标(54x54)
- - `hook/index_route_case_end.php` - 路由hook
- 3. 在hook文件中添加路由逻辑:
- ```php
- <?php
- case 'my_page':
- include _include(APP_PATH.'plugin/my_plugin/my_page.php');
- break;
- ```
- 4. 创建页面文件 `my_page.php`
- ### 八、重要提示
- 1. **使用_include函数**:必须使用`_include()`而不是`include()`来引入文件
- 2. **清除缓存**:遇到"玄学问题"时,可以点击后台"其他"里的"清除缓存"
- 3. **JSON输出**:在请求参数中加上`ajax=1`即可输出JSON数据(可能需要安装官方API插件)
- 4. **单入口设计**:所有请求都通过`index.php`处理
- 这就是Xiuno BBS插件开发的核心内容。需要我详细解释某个部分吗?
复制代码
|
|