插件系统

该插件系统允许您按自己的需求修改脚本的任意功能。插件在网站上的安装与更新都可直接在 DataLife Engine 控制面板中一键完成。如果插件是按照新系统开发的,用户将不再需要阅读安装说明、手动修改脚本文件等操作,只需在管理面板中上传插件即可。

插件系统基于虚拟文件系统技术构建。您只需在插件中描述应对哪个文件执行哪些操作,DataLife Engine 就会根据这些信息创建这些文件的虚拟副本,并将所需修改全部应用到副本中。系统工作时使用的是这些虚拟副本,而不会触及原始文件。您几乎可以描述对所有文件的修改,只有少数基础文件除外,例如根目录文件,但这些文件本身除了引入其他文件外并不承担具体功能。负责 AJAX 功能的文件也可以修改,为此它们已经被彻底重写为通过控制器工作。这种方式带来的优势是什么?首先,原始文件始终保持不变,因此插件可以轻松修改、删除、更新等。其次,该系统对网站整体造成的负载尽可能低,因为虚拟文件副本只会在安装或更新插件时创建一次,此后 DataLife Engine 就像处理普通原生文件一样直接使用这些已修改文件,不会为调用点、存储和跟踪需要修改的位置与功能而额外消耗内存。服务器负载只会增加插件本身带来的部分,而插件管理系统不会再造成额外负载。第三,脚本更新不再存在问题:脚本可以升级到新版本,而您的插件会自动尝试应用到新版本之上。同时,不同插件还可以修改同一个文件而不发生冲突,前提当然是它们没有执行彼此完全相反的操作。

在插件管理模块中,您既可以直接在控制面板中创建插件,也可以上传现成插件。下面先看如何直接在控制面板中添加新插件:

在第一个选项卡中,您需要填写插件的基本信息:名称和简短说明。为了便于与其他插件区分,您还可以为它指定一个将在插件列表中使用的图标。同时还要设置插件本身的版本,以及它兼容的 DataLife Engine 版本。

在下一个选项卡中,您需要定义应对文件执行的具体操作。您可以添加一个或多个需要处理的文件,并为每个文件指定一个或多个要执行的操作。可对文件执行的操作如下:

  1. 查找并替换某段代码。
  2. 查找指定位置并在其上方添加代码。
  3. 查找指定位置并在其下方添加代码。
  4. 完全以自己的内容替换文件内容。
  5. 创建原始 DLE 中不存在的新虚拟文件。

您还可以随时添加或删除文件,修改或删除针对文件的操作。为了方便阅读与编辑,所有代码都会高亮显示,并且字段高度可以动态拉伸。

这意味着,过去您需要手动修改脚本文件、将改动记录在记事本中,并在每次升级脚本时重新把这些修改应用到文件中的情况,已经随着新版本成为过去。现在您可以直接在管理面板中创建自己的插件,只需一次性描述您需要的变更,等脚本更新到新版本时,系统会自动将这些变更应用到新版之上,您无需再为此操心。

在下一个选项卡中,您还可以添加插件在各种情况下应对 MySQL 数据库执行的操作。您可以指定在插件安装、更新、禁用、启用和删除时需要执行的 MySQL 查询列表。对于每一种操作,您既可以设置单条查询,也可以设置多条查询组成的列表。

对于已经存在的插件,您可以执行以下操作:将其禁用。此时插件仍保留在网站中,但脚本会完全忽略它,对文件的所有操作都将暂停。您还可以将其更新到更高版本(如果存在新版本);也可以将插件下载到本地电脑,以便安装到另一网站。插件文件本身以 XML 格式下载,其中包含所有操作描述。也就是说,插件本质上就是一个 XML 文件,可通过管理面板安装到网站上。

再来看如何将现成插件上传到网站。您可以上传并安装已经准备好的插件。点击相应按钮后,您可以上传 XML 插件文件,也可以上传 ZIP 插件归档。这使得创建复杂插件成为可能,插件中可以包含大量额外文件,例如图形文件和 PHP 文件。举例来说,如果您不想把所有操作都直接写进插件中,就可以创建附加文件并将其打包进归档,然后把它们分发到新的位置。需要注意的是,归档中只能包含不属于原始发行包的 PHP 文件,也就是您自己的附加文件;如果归档中包含了发行包自带的文件,则上传会被阻止。标准文件的修改仍然需要在插件自身中描述。XML 插件文件本身必须位于归档根目录中。

如果您上传的是带插件的归档,而 DataLife Engine 对归档中的文件没有写入权限,系统会自动请求 FTP 访问权限,以便上传您的归档。如果不需要这些访问权限,文件将自动复制而无需额外输入。与此同时,这些访问信息不会被保存,在不再需要后会自动删除。

插件管理系统还内置了插件错误日志功能。如果某个文件操作无法执行,或者发生任何错误,您都可以轻松看到并修正。例如,当您的插件与下一版 DLE 不兼容时,这一点尤为方便,您能迅速发现问题并轻松适配插件。

插件支持在名称、说明以及备注中使用 [lang=X] 文本 [/lang] 标签。它们会根据用户在管理面板中所使用的语言输出不同文本。其中 X 是语言包中的 ISO 语言代码。这样,您就可以用不同语言输出名称和备注。例如,标签 [lang=ru]俄语文本[/lang] 会在用户使用俄语时输出该文本,而标签 [lang=en]英语文本[/lang] 会在用户使用英语时输出对应文本。