如何编写自己的预保存转换



正如这里所描述的,mediawiki解析器允许预保存转换,它会自动用其他内容替换wiki文本。

如何创建自己的?

我确实找到了这个,但我什至不能确定它是否相关。http://mediawiki.sourcearchive.com/documentation/1.13.3/classArticle_a0d27b9b92f688ea124b1f1c4c0b60018.html

在现代MediaWiki版本(v1.21+)中,一种方法可能是:

  1. 编写自己的ContentHandler类,扩展WikiTextContent和WikitextContentHandler。 这些可以像以下一样简单:

    class MyContentHandler extends WikitextContentHandler {
        protected function getContentClass() {
            return 'MyContent';
        }
    }
    class MyContent extends WikitextContent {
        // TODO: override preSaveTransform() here
    }
    
  2. 在内容子类中,覆盖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 );
    }
    
  3. 使用本地设置中的$wgContentHandlers将新的内容处理程序注册为普通 wiki 页面的处理程序.php:

    $wgContentHandlers[CONTENT_MODEL_WIKITEXT] = 'MyContentHandler';
    

(警告:我相信这种方法应该有效,但我还没有实际测试过! 使用风险自负。 欢迎改进和错误报告。

签名的替换在mediawiki/core中是硬编码的。

我不知道有什么方法可以在不更改核心文件的情况下做同样的事情(顺便说一句,这不是一个好主意)。您可以使用解析器函数或创建标记扩展,以类似的方式实现您想要执行的操作。

最新更新