从MediaWiki UI中的链接回调到扩展名的最实用的方法是什么?
我有一个扩展程序,它会在历史记录和差异页面中添加一个链接(例如“报告”),这需要在我的扩展程序中运行代码。
是否可以拥有“通用”回调网址(例如index.php/PageName?action=report&edit=123
),还是需要创建一个完整的特殊页面(index.php / Special:Report?edit = 123`)来处理这个问题。执行我自己的代码?
除了报告成功或失败之外,不会再有任何UI。
答案 0 :(得分:2)
这两种都是可能的。
要定义action=report
等自定义操作,请定义Action class的子类并将其添加到$wgActions
。 (还有UnknownAction hook可以用于同一目的,但它被认为已被弃用。)
要定义新的特殊页面,您需要创建SpecialPage的子类并将其添加到$wgSpecialPages
。在mediawiki.org上的Manual:Special pages处有更多信息。
您可能还需要考虑第三种选择:
$wgAPIModules
来实现。然后可以使用扩展名注入页面的AJAX code来调用此类API模块(例如,使用ResourceLoader),然后他们可以使用JSON报告操作失败的成功。通过AJAX调用自定义API模块可以提供比成功/错误页面的纯链接更好的用户体验。但是,对于可访问性,您可能希望提供两种方法,以便即使对于没有JavaScript支持或禁用JavaScript的用户,您的扩展仍然可用。这通常最好通过将SpecialPage / Action和ApiBase子类编写为共享后端的精简包装器来完成。