插件实现流程
开始编写社区插件,您应当首先对插件实现的流程有一个大致的了解。以下是推荐的插件编写流程:- 熟练使用 Discuz! 社区系统后,对希望完善或补充的个性化功能进行评估,进而提出插件的功能需求。
- 对插件做一个概括性的设计,例如:需要使用什么菜单、什么参数,配置哪些选项、数据结构如何设计、前后台实现哪些功能等等。
- 阅读本文档并在系统设置中实际体验 Discuz! 插件接口所实现的功用,例如:您的插件应当如何设计才能良好的挂接到社区系统中来。
- 编写相应程序代码和模板语句,实现所需的功能并进行代码测试、兼容性测试和代码改进。
- 如果需要公开您的插件,可以用插件导出的方式,将插件配置信息导出到一个 XML 文件中,连同相应的程序和模板文件一同打包。同时,编写一个适合新手的插件的说明书也是必不可少的。
- 将插件提供给他人,或自己使用,根据使用者反馈,对插件进行完善。
文件命名规范
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 主要完成了以下任务:- 对不同 PHP 及操作系统环境做了判断和兼容性处理,使得 Discuz! 可以运行于各种不同配置的服务器环境下。
- 初始化常量 IN_DISCUZ 为 TRUE,用于 include 或 require 后续程序的判断,避免其他程序被非法引用。
- 读取社区程序所在绝对路径,存放于常量 DISCUZ_ROOT 中。
- 加载所需的基本函数库 source/function/function_core.php。
- 通过 config/config_global.php 中提供的数据库账号信息,建立数据库连接。Discuz! 支持数据表的前缀,如需获得表的全名,可使用
DB::table('tablename')方式。 - 判断用户是否登录,如登录标记
$_G['uid']为非 0,同时将$_G['username'](加了 addslashes 的用户名)、$_G['member']['username'](原始的用户名)、$_G['member']['password'](用户密码的MD5串)等相应用户信息赋值。 - 判断用户管理权限,将管理权限标记
$_G['adminid']为 1~3 中间的值。0 代表普通用户;1 代表论坛管理员;2 代表超级版主;3 代表论坛版主。 - 将用户权限按照其所在的主用户组 ID 标记为
$_G['groupid'],相关权限从该$_G['groupid']所对应的系统缓存中读出,存放于$_G['group']。 - 预置读入了每个模块的各种设置变量。
- [X2.5变更内容]
$_G['username']将不进行 addslashes 处理。