插DiscuzX件开发.ppt
Discuz!X 插件开发教程,主讲人:杨欢,2023/9/11,插件实现流程文件命名规范class_core.php 模块功能白皮书,功能需求概括设计阅读手册开发测试插件导出,被引用程序文件,以.inc.php 后缀命名普通程序文件,以.php 后缀命名引用的函数库或类库,以.func.php(函数库)或.class.php(类库)后缀命名模板文件,以.htm 后缀命名模板语言包文件,以.lang.php 后缀命名Table 类文件存放于 source/plugin/identifier/table/目录下,并以 table_表名.php 格式命名,PHP 及操作系统环境做了判断和兼容性处理初始化常量加载所需的基本函数库建立数据库连接获取用户信息预置读入了每个模块的各种设置变量,插件开发准备工作插件模块分类插件变量配置,2023/9/11,开启开发者模式($_configplugindeveloper=1;),程序链接扩展项目程序脚本,2023/9/11,参数读取编写插件程序时,可能需要读取一些插件的信息,如果插件需要使用者进行配置,还需要读取使用者设置的参数值。Discuz!允许插件程序使用数据库读取和缓存读取这两种方法获取插件信息和参数。Discuz!的插件接口已经对插件信息进行了合理的缓存,使用缓存读取的方式,将比数据库读取速度更快,消耗的资源更是几乎可以忽略不计。缓存读取唯一的局限是需要插件使用插件接口提供的通用后台管理程序。如果使用自定义后台模块的方式,需要后台模块将参数存放到 pluginvars 数据表中,才能被系统正常缓存。我们强烈推荐您通过缓存读取插件信息和配置数据。缓存控制由于调用系统缓存统一通过“loadcache()”函数调用,并存放于$_Gcache 中,因此“loadcache(plugin)”后插件的变量缓会存放于$_Gcacheplugin 中。嵌入点插件和以 plugin.php 为主脚本调用的插件无需加载此缓存,系统已自动加载了缓存。变量配置类型为“版块/*”的变量会保存在$_Gcacheforumsfidplugin 中。变量配置类型为“用户组/*”的变量会保存在$_Gcacheusergroup_groupidplugin 和$_Ggroupplugin 中。,2023/9/11,广告类脚本位置:source/class/adv/adv_name.php语言包位置:source/language/adv/lang_name.php道具类脚本位置:source/class/magic/magic_name.php语言包位置:source/language/magic/lang_name.php任务类脚本位置:source/class/task/task_name.php语言包位置:source/language/task/lang_name.php验证问答类脚本位置:source/class/secqaa/secqaa_name.php语言包位置:source/language/secqaa/lang_name.php验证码类(Discuz!X2.5 新增)脚本位置:source/class/seccode/seccode_name.php语言包位置:source/language/seccode/lang_name.php,2023/9/11,$sql=,插件作者可以设计一个脚本文件用于插件的升级,文件名任意。脚本中可用 runquery()函数执行 SQL 语句,表名可以直接写“cdb_”。配置文件指定:升级程序中可通过$fromversion 和$toversion 变量判断升级的具体版本号,并随意设计页面的跳转,只要在插件升级结束时候输出添加以下代码即可。$finish=TRUE;,插件作者可以设计一个脚本文件用于插件在安装、卸载、升级操作前的检测,文件名任意。插件作者只需在导出的 XML 文件结尾加上检测脚本的文件名即可,插件在安装的时候您可以自定义授权信息文本,文本支持 Discuz!代码,站长同意后才能安装插件。如果插件存在后台管理界面或者变量配置,那么插件介绍文本会显示在插件后台页面中。插件作者只需在导出的 XML 文件结尾加上以下内容即可。,请仔细检查您的插件是否可以在相应的 Discuz!版本中运行。然后在 XML 文件的以下分支中自行更改。如您的插件兼容多个版本,请用逗号(,)分隔,如“X2,X2.5”(此写法从 Discuz!X2 R20120329 后开始支持)配置文件中添加:,插件安装时可以直接导入一个或多个论坛数据,这些论坛数据包括表情(smilies)、风格(styles)的数据。在导出的 XML 文件结尾加上需要导入数据的类型和数据文件名即可,多个文件名用逗号(,)分隔。,7,创建语言包给插件创建语言包首先需要创建一个 data/plugindata/identifier.lang.php 文件,文件内容中包含 4 个数组,如下:chinese,.);/程序脚本文件的语言包$templatelangidentifier=array(english=chinese,.);/模版文件的语言包。$installlangidentifier=array(english=chinese,.);/为安装、升级、卸载脚本用的语言包。?,模版中调用模板文件语言包,通过 langidentifier:english 方式调用。程序脚本中调用脚本文件语言包,通过 lang(plugin/identifier,english)方式调用。安装脚本中调用安装脚本文件语言包,通过$installlang 变量直接获取。如$installlangenglish。系统语言包用于替换系统语言包中的某些语言条目。,插件的模板统一放置到 source/plugin/identifier/template 目录下,程序脚本通过以下语句调用插件模板文件,如下例,调用 source/plugin/identifier/template/test.htminclude template(identifier:test);模版中调用插件模版通过以下方法:template identifier:test,所有与插件的程序,包括其全部的前后台程序,请全部放入 source/plugin/目录中,同时在插件的安装说明中指出,插件的文件需要复制到哪些目录。为了避免与其他插件冲突,请尽量建立 source/plugin/下的子目录,并将插件程序放置于子目录下,这样您编写的插件将获得更好的兼容性。如果您的插件包含“导航栏”模块,该模块将统一用 plugin.php?identifier=xxx&module=yyy 的方式调用,请在相应链接、表单中使用此方式。其中 xxx 为插件的惟一标识符,yyy 为模块名称。前台插件外壳程序 plugin.php 已经加载了通用初始化模块/source/class/class_core.php,不需再次引用。如果您的插件包含“管理中心”模块,该模块将统一用 admin.php?action=plugins&identifier=xxx&pmod=yyy 的方式调用,请在相应链接、表单中使用此方式。其中 xxx 和 yyy 的定义与“导航栏”模块中的相同。系统还允许用 admin.php?action=plugins&edit=$edit&pmod=$mod 的方式来生成链接和表单地址,$edit 和$mod 变量已经被插件后台管理接口赋值,因此将这两个变量值带入 URL 中也是被支持的。由于后台模块是被 admin.php 调用,因此已加载了通用初始化模块/source/class/class_core.php 并进行了后台管理人员权限验证,因此模块程序中可直接写功能代码,不需再进行验证。,Thanks,