插件机制与开发

2024-07-17 23:44 更新

为了获取更多最新内容及功能更新,请直接访问我们的首页以查看DzzOffice笔记的最新地址。

插件实现流程

在开始编写DzzOffice插件之前,您应当首先对插件开发流程有一个大致的了解。以下是推荐的插件开发流程:

  • 在熟练掌握DzzOffice系统的基础上,对希望完善或补充的个性化功能进行评估,进而提出插件的功能需求。
  • 对插件进行概要设计,如:需使用哪些菜单、参数,配置哪些选项、数据结构设计、前后台实现哪些功能等。
  • 阅读本文档并在系统设置中实际体验DzzOffice插件接口所实现的功用,如:如何设计插件以便顺利接入官方应用市场,插件接口能实现哪些功能、不能实现哪些功能,以及插件为此所需的优化、改造和取舍。
  • 编写相应程序代码和模板语句,实现所需的功能并进行代码测试、兼容性测试和代码改进。
  • 如有必要公开插件,可将其配置信息导出为XML文件,并与相应程序和模板文件一同打包。同时,编写一份适用于新手的插件说明书也是必不可少的,包括:插件适用的DzzOffice版本、功能概述、兼容性声明、安装方法、使用方法、卸载方法等。
  • 将插件提供给他人或自行使用,根据使用者反馈对插件进行完善。至此,插件开发流程结束。

文件命名规范

identifier:应用的唯一标识符唯一标识符用于在后续的插件模块中调用本插件,必须确保不与现有插件重复。命名规则应遵循与 PHP 变量命名相同的规范。尽管在初次设置后仍可进行更改,但强烈建议一次性完成此配置设置,以免引发大量的代码变更并增加编码的复杂性。请注意:唯一标识符请勿设置得过短,或使用可能导致与其他插件重复的命名。例如插件名称为“小胡插件”,则唯一标识符可设置为“xiaohu”。最后,在dzz/目录中创建与唯一标识符同名的目录名,如 dzz/xiaohu/。DzzOffice遵循以下规范对程序和模板进行命名,请在设计插件时尽量遵循此命名规范:

  • 可直接通过浏览器访问的普通程序文件,以.php为后缀命名。
  • 被普通程序文件引用的程序文件,以.inc.php为后缀命名。
  • 被普通程序文件或引用程序文件引用的函数库或类库,以function_.php(函数库)或class_.php(类库)为后缀命名。
  • 模板文件,以.htm为后缀命名,插件模板文件位于dzz/identifier/template/目录中,移动端插件模板位于dzz/identifier/template/mobile/目录中。
  • 模板语言包文件,以.php为后缀命名,插件语言包文件位于dzz/identifier/language/zh-cn/目录中,文件名为lang.php。
  • 动态缓存文件,存放于/data/cache目录中,根据不同的用途进行独立命名。
  • 使用后台数据备份功能生成的备份文件,通常以.sql为后缀,存放于data/目录中。
  • 某些目录中存在内容为空白的index.htm文件,此类文件旨在避免Web服务器在打开Directory Index时可能产生的安全问题。
  • 自DzzOffice 2.0起,产品对数据表进行了封装,封装后的文件统一命名为Table类,通过"C::t(Table类文件名)"方式调用。插件如需封装自己的数据表,可将Table类文件存放于dzz/identifier/class/table/目录下,并以table_表名.php格式命名。

注意事项

请在您动手编写插件之前,务必仔细阅读以下原则,并遵循这些原则以避免可能发生的问题:

  • 请将所有与插件相关的所有程序(包括前端和后端程序)放置于 dzz/ 目录中。同时在插件的安装说明中指出,插件的文件需要复制到哪些目录。为了避免与其他插件冲突,请尽量建立 dzz/ 下的子目录,并将插件程序放置于子目录下,这样您编写的插件将获得更好的兼容性。
  • 如果您的插件包含“导航栏”模块,该模块将统一用 index.php?mod=xxx&op=yyy 的方式调用,请在相应链接、表单中使用此方式。其中 xxx 为插件的惟一标识符,yyy 为模块名称。前台插件外壳程序 index.php 已经加载了通用初始化模块 /core/class_core.php,不需再次引用。
  • 如果您的插件包含“管理中心”模块,该模块将统一用 index.php?mod=xxx&op=admin 的方式调用,请在相应链接、表单中使用此方式。其中 xxx 为插件的惟一标识符,admin 为模块名称。
  • 请勿绕过插件的前后台外壳(index.php 和 admin.php)而以直接调用某程序的方式编写插件。这种做法会导致用户使用不便、代码冗余和不规范,同时又产生了因验证程序考虑不周到而带来的安全隐患。您可以在任何地方(如链接和表单)方便地使用上述 URL 地址调用插件模块。

  • 由于所有与插件相关的程序(包括前端程序)都使用外壳调用,请务必在第一行添加以下代码:
if(!defined('IN_DZZ')) { exit('Access Denied'); }

后台程序第一行添加以下代码:

if (!defined('IN_DZZ') && !defined('IN_ADMIN')) { exit('Access Denied'); }

以免其被 URL 直接请求调用,产生安全问题。

  • 通常情况下,请使用插件导出的功能发布插件,以便用户一次性导入插件的配置数据。在极特殊情况下,,也可以分步骤告知使用者如何进行插件配置管理和安装此插件。
  • 若功能独立,请尽量使用单独程序的方式编写插件(即外挂型插件),并尽量减少对 DzzOffice 本身代码的修改,这将为使用者今后的升级带来很大方便。
  • 您可以修改 DzzOffice 本身的数据结构,但推荐在不影响效率的前提下将插件数据存储在另外的数据表中,以防您添加的字段、索引与后期版本 DzzOffice 核心数据字段重名。
  • 请在插件说明书中对插件进行详尽描述,如新增字段、表、程序,版本兼容性,后续支持方式(如不提供支持或采用特定方式提供)。若可能,请提供插件的卸载方法,包括去除字段、删除新增程序、恢复被插件修改的程序等。使用者会感激您为此付出的辛勤劳动,甚至愿意支付相应的费用支持您未来的发展。
  • 若插件使用另外的数据表存储,请在插件管理中准确设置插件所使用的数据表名称(不含前缀),以便用户在备份数据时能一并备份插件数据。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号