正如这里所描述的,mediawiki解析器允许预保存转换,它会自动用其他内容替换wiki文本。
如何创建自己的?
我确实找到了这个,但我什至不能确定它是否相关。http://mediawiki.sourcearchive.com/documentation/1.13.3/classArticle_a0d27b9b92f688ea124b1f1c4c0b60018.html
在现代MediaWiki版本(v1.21+)中,一种方法可能是:
-
编写自己的ContentHandler类,扩展WikiTextContent和WikitextContentHandler。 这些可以像以下一样简单:
class MyContentHandler extends WikitextContentHandler { protected function getContentClass() { return 'MyContent'; } } class MyContent extends WikitextContent { // TODO: override preSaveTransform() here }
-
在内容子类中,覆盖preSaveTransform()方法,例如像这样(如果你想在正常的PST通过后修改wiki文本):
public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) { $content = parent::preSaveTransform( $title, $user, $popts ); $orig = $text = $content->getNativeData(); // ...modify $text here... return ( $orig === $text ) ? $content : new static( $text ); }
-
使用本地设置中的$wgContentHandlers将新的内容处理程序注册为普通 wiki 页面的处理程序.php:
$wgContentHandlers[CONTENT_MODEL_WIKITEXT] = 'MyContentHandler';
(警告:我相信这种方法应该有效,但我还没有实际测试过! 使用风险自负。 欢迎改进和错误报告。
签名的替换在mediawiki/core中是硬编码的。
我不知道有什么方法可以在不更改核心文件的情况下做同样的事情(顺便说一句,这不是一个好主意)。您可以使用解析器函数或创建标记扩展,以类似的方式实现您想要执行的操作。