overwrite

燃烧的冰2020-01-14  315

比如 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": [] // 依赖其他插件
}