> ## Documentation Index
> Fetch the complete documentation index at: https://discuz.p.cafe/llms.txt
> Use this file to discover all available pages before exploring further.

# 准备工作

> 开始编写社区插件，您应当首先对插件实现的流程有一个大致的了解

## **插件实现流程**

开始编写社区插件，您应当首先对插件实现的流程有一个大致的了解。以下是推荐的插件编写流程：

1. 熟练使用 Discuz! 社区系统后，对希望完善或补充的个性化功能进行评估，进而提出插件的功能需求。
2. 对插件做一个概括性的设计，例如：需要使用什么菜单、什么参数，配置哪些选项、数据结构如何设计、前后台实现哪些功能等等。
3. 阅读本文档并在系统设置中实际体验 Discuz! 插件接口所实现的功用，例如：您的插件应当如何设计才能良好的挂接到社区系统中来。
4. 编写相应程序代码和模板语句，实现所需的功能并进行代码测试、兼容性测试和代码改进。
5. 如果需要公开您的插件，可以用插件导出的方式，将插件配置信息导出到一个 XML 文件中，连同相应的程序和模板文件一同打包。同时，编写一个适合新手的插件的说明书也是必不可少的。
6. 将插件提供给他人，或自己使用，根据使用者反馈，对插件进行完善。

## **文件命名规范**

Discuz! 按照如下的规范对程序和模板进行命名，请在设计插件时尽量遵循此命名规范：

| **文件类型** | **命名规范**               | **说明**                                                  |
| :------- | :--------------------- | :------------------------------------------------------ |
| 普通程序文件   | .php                   | 可以直接通过浏览器访问                                             |
| 被引用的程序文件 | .inc.php               | 被普通程序文件引用                                               |
| 函数库或类库   | .func.php / .class.php | 被普通程序文件或引用程序文件引用                                        |
| 模板文件     | .htm                   | 存在于 source/plugin/*identifier*/template/ 目录中            |
| 手机版模板    | .htm                   | 存在于 source/plugin/*identifier*/template/mobile/目录中      |
| 语言包文件    | .lang.php              | 开发时存放于 data/plugindata/ 目录中，文件名为\_identifier\_.lang.php |
| 动态缓存文件   | 无特定后缀                  | 存放于 ./data/cache 目录中                                    |
| 备份文件     | .sql                   | 通常以 .sql 为后缀，存放于 data/ 目录中                              |
| Table类文件 | table\_表名.php          | 存放于 source/plugin/*identifier*/table/ 目录下               |

## **class\_core.php 模块功能白皮书**

source/class/class\_core.php 是 Discuz! 的通用初始化模块程序，其几乎被所有的外部代码所引用。class\_core.php 主要完成了以下任务：

1. 对不同 PHP 及操作系统环境做了判断和兼容性处理，使得 Discuz! 可以运行于各种不同配置的服务器环境下。
2. 初始化常量 IN\_DISCUZ 为 TRUE，用于 include 或 require 后续程序的判断，避免其他程序被非法引用。
3. 读取社区程序所在绝对路径，存放于常量 DISCUZ\_ROOT 中。
4. 加载所需的基本函数库 source/function/function\_core.php。
5. 通过 config/config\_global.php 中提供的数据库账号信息，建立数据库连接。Discuz! 支持数据表的前缀，如需获得表的全名，可使用`DB::table('tablename')`方式。
6. 判断用户是否登录，如登录标记 `$_G['uid']` 为非 0，同时将 `$_G['username']`（加了 addslashes 的用户名）、`$_G['member']['username']`（原始的用户名）、`$_G['member']['password']`（用户密码的MD5串）等相应用户信息赋值。
7. 判断用户管理权限，将管理权限标记 `$_G['adminid']` 为 1\~3 中间的值。0 代表普通用户；1 代表论坛管理员；2 代表超级版主；3 代表论坛版主。
8. 将用户权限按照其所在的主用户组 ID 标记为 `$_G['groupid']`，相关权限从该 `$_G['groupid']` 所对应的系统缓存中读出，存放于 `$_G['group']`。
9. 预置读入了每个模块的各种设置变量。
10. \[X2.5变更内容] `$_G['username']` 将不进行 addslashes 处理。
