0 0 0

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

V 6 哆哆 UID:1 管理员
2小时前 3 商家 创始人

根据我获取到的内容,让我为你整理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插件开发的核心内容。需要我详细解释某个部分吗?

最新回复 (0)
只看楼主
全部楼主
    暂无回复,快来抢沙发吧

    暂无回复,快来抢沙发吧

请先登录后发表评论!

返回
请先登录后发表评论!