|
discuz编写插件的原则与注意事项
请在动手编写插件之前仔细阅读以下原则,遵循这些原则,将能有效地避免可能发生的问题:
1.所有与插件的程序,包括其全部的前后台程序,请全部放入"./plugins" 目录中,同时在插件的安装说明中指出,插件的文件需要复制到哪些目录。为了避免与其他插件冲突,请尽量建立"./plugins" 下的子目录,并将插件程序放置于子目录下,这样编写的插件将获得更好的兼容性。`
2.如果插件包含“前台调用(导航栏)”模块,该模块将统一用"plugin. php ?identifier=xxx&module=yyy" 的方式调用,请在相应链接、表单中使用此方式。其中XXX 为插件的唯一标识符, yyy 为模块名称。前台插件外壳程序plugin.php 已经加载了通用初始化模块("/source/class/class_core.php"), 不需再次引用。
3.如果插件包含“后台调用(管理中心)”模块,该模块将统一用"admincp. php ?action=plugins&identifier=xxx&mod=yyy "的方式调用,请在相应链接、表单中使用此方式。其中XXX 和yyy 的定义与“前台调用(前台菜单)”模块中的相同。系统还允许用"admincp.php?action=plugins&edit=$edit&mod=$mod" 的方式来生成链接和表单地址, $edit 和$mod 变量已经被插件后台管理接口赋值,因此将这两个变量值带入URL 中也是被支持的。由于后台模块是被admincp.php 调用,已加载了通用初始化模块(" /source/class/class_core.php") 并进行了后台管理人员权限验证,因此模块程序中可直接写功能代码,不需再进行验证。
4.请勿绕过插件的前后台外壳(plugin.php 和admin.php) 而以直接调用某程序的方式编写插件,因为这样既导致了用户使用不便,代码冗余和不规范,同时又产生了因验证程序考虑不周到而带来的安全隐患。可以在任何地方,包括链接、表单等处方便地使用上述URL 地址对插件模块进行调用。
5.所有与插件有关的程序,包括全部的前后台程序,因全部使用外壳调用,请务必在第一行加入以下内容,以免其被URL 直接请求调用,产生安全问题。
if(!defined('IN_DISCUZ')) {
exit('Access Denied');}
后台程序第一行加入
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
exit('Access Denied');}
6.一般情况下,发布插件请使用插件导出的功能,以方便使用者一次性导入插件的配置数据,极特殊的情况下,也可以分步骤告知使用者如何进行插件配置管理和安装此插件。
7.如果功能独立,请尽量使用单独程序的方式编写插件(即外挂型插件),而尽量少地对论坛本身代码进行修改,这将对使用者今后的升级带来很大方便。
8.可以修改Discuz!本身的数据结构,但推荐在不影响效率的前提下将插件数据用另外的数据表存储,因为不能排除增加的字段或索引和Discuz! 以后版本的核心数据字段重名的可能。在任何情况下,请不要删除Discuz! 标准版本数据结构中已有的字段或索引。
9.请在插件说明书中对插件做详尽的描述,例如增加了哪些字段、哪些表,修改了或新增了哪些程序,版本兼容性,后续支持的提供方式(例如不提供支持,或以什么样的方式提供)。如果方便,请尽可能提供插件的卸载方法,例如去除哪些字段、删除哪些新增的程序、将哪些被插件修改的程序恢复原状等等。
10.如果插件使用另外的数据表存储,请在插件管理中准确设置插件所使用的数据表名称(不包含前缀),这样用户在备份数据的时候,能够把插件数据一同备份。
11.Discuz! 内置了8 种自定义积分,存储于 common_member 表中的extcredits1至extcredits8 字段中,类型为有符号整数,可以在引用common.inc.php 后,在$extcredits 或$_DCA CHE['settings'] ['extcredits'] 中读取8 种积分的启用信息(详情请参考"./forumdata/cache/cache_settings.php ") 。插件程序中如果需要更新用户积分,可直接UPDATE 相应的积分字段,无需其他操作。
|
上一篇:discuz插件参数读取与缓存控制下一篇:discuz插件开发的技术文档
|