通过给Xiuno BBS打补丁实现让某个特定插件插件覆盖其他插件的hook
Tillreetree (99) 开发者 管理团队 5小时前

顾名思义。一个仅需两个文件的patch就可以做到。

从2016年,到现在为止,没有人想到过可以这么做。I did it first.

 


它能做什么?

1. 终极样式控制

场景:你想把原版点赞按钮(Bootstrap风格)改成圆形悬浮按钮(类似Medium)。

  • 传统方式:直接去修改haya_post_like里的thread_plugin_body.htm,如果自己的主题也是修改过的,兼容性无法保证
  • 本方案
    • 在主题插件(如till_theme_htmxtest)中放置:
      overwrite/plugin/haya_post_like/hook/thread_plugin_body.htm
      
    • 写入你的新版按钮HTML+CSS,自动覆盖原插件逻辑,无需修改原插件代码

2. 插件行为劫持

场景:某个插件在发帖时强制跳转,你想改成无刷新提交

  • 传统方式:破解插件代码,升级后失效。
  • 本方案
    • 在主题插件中创建:
      overwrite/plugin/thread_create/hook/thread_create_end.php
      
    • 替换为HTMX逻辑:
      <?php
      // 原代码:header("Location: ...");
      // 新代码:输出HTMX响应
      echo '<div hx-get="thread_url" hx-target="#main" hx-swap="innerHTML">提交成功!</div>';
      

3. 安全拦截

场景:某个插件存在XSS漏洞,但作者已失联。

  • 传统方式:要么学PHP手动修改,要么等某人主动分享自己修改过的版本,要么等死。
  • 本方案
    • 在主题插件中覆写漏洞文件:
      overwrite/plugin/tt_credits/hook/post_update_post_end.php
      
    • 重写逻辑,无需等待官方修复

4. 多插件协调

场景:插件A和插件B同时修改了导航栏,冲突导致错位。

  • 传统方式:手动调整优先级,反复调试。
  • 本方案
    • 在主题插件中统一覆写:
      overwrite/plugin/pluginA/hook/nav.htm
      overwrite/plugin/pluginB/hook/nav.htm
      
    • 按你的需求重新设计最终输出,无视原始插件的逻辑。

为什么这是革命性的?

  1. 零(点一)侵入性

    • 不修改原插件文件,不影响升级。
    • 所有覆盖逻辑集中在你控制的主题插件内
    • 唯一的修改就是xiuno bbs的核心文件之一,因为这是走投无路之选。
  2. 精确覆盖

    • 你可以只覆盖某个插件的特定Hook,其余部分保持原样。
  3. 动态生效

    • 修改覆盖文件后无需重启或重装插件,立即生效。
  4. 可逆操作

    • 卸载主题插件后,所有原始行为自动恢复。

技术原理(一句话版)

通过劫持Xiuno的Hook扫描逻辑,让主题插件的overwrite/plugin/{插件名}/hook/目录下的文件,优先于原插件文件加载,从而实现“合法覆盖”。


这是补丁,这是Xiuno的《盗梦空间》

因为你在别人的插件里植入了自己的想法。

这让Xiuno BBS的灵活性提升了一个数量级。


如需下载请先回复并刷新本帖!
最新回复 (2)
广告推荐
Tillreetree
开发者 管理团队
广告推荐