比如 wellcms php功能或htm 模板无法满足需要时,这个时候你可以使用 Overwrite 机制,对原有文件进行覆盖。如果新的覆盖文件中仍保留了旧有的 hook 钩子,那么系统仍会进行 hook 到该文件的钩子处,最后将合并后的文件存放到tmp目录里。
不推荐使用这种方式开发插件,因为官方更新程序使用了新的文件,而您却用自己的文件覆盖了新的文件,会导致系统bug。
举例,对官方默认 view/htm/header_nav.inc.htm 文件进行覆盖:
在 plugin 目录下新建插件目录 my_plugin
plugin/
conf.json (配置文件)
icon.png (图标宽高:200*200)
my_plugin/ (插件目录)
overwrite/ (覆盖文件目录)
view/ (覆盖文件目录)
htm/ (覆盖文件目录)
header.inc.htm (被覆盖的文件)
完整的路径为 plugin/my_plugin/overwrite/view/htm/header.inc.htm
以下文件可以被 overwrite:
index.inc.php route/*.php model/*.php view/htm/*.htm admin/view/htm/*.htm admin/route/*.php admin/index.inc.php admin/menu.conf.php lang/*.php
如果多个插件同时都使用了 overwrite 一个文件,那么如何保证自己的被优先使用。相同文件多处 overwrite 程序只将会进行一次 overwrite。如何使自己的文件被采用进行overwrite?
根据 conf.json 文件 overwrites_rank 配置,进行选择使用哪个文件 overwrite ,多个插件同时 overwrite 一个文件,程序会根据 设置的最大值 overwrite
{ "name": "插件名example", "brief": "插件介绍example brief", "type": "0", // 无需修改 "version": "1.0.0", // 插件版本 "software_version": "2.0.0", "installed": 0, "enable": 0, "hooks_rank": [], // 同一点hook优先插入 "overwrites_rank": { "header.inc.htm":"1000", "index.php":"100" }, // 仅限最大值 overwrite 一次,可同时设置多个文件优先 overwrite 对应的数值越大越会被优先使用 "dependencies": [] // 依赖其他插件 }