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

时间:2015-06-16 05:13:11

标签: php mediawiki mediawiki-api mediawiki-extensions

正如here所述,mediawiki解析器允许预先保存转换,该转换将自动将wikitext替换为其他内容。

如何创建自己的?

我确实找到了这个,但我甚至无法确定它的相关性。 http://mediawiki.sourcearchive.com/documentation/1.13.3/classArticle_a0d27b9b92f688ea124b1f1c4c0b60018.html

2 个答案:

答案 0 :(得分:2)

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

  1. 撰写您自己的ContentHandler课程,展开WikiTextContentWikitextContentHandler。这些可以很简单:

    class MyContentHandler extends WikitextContentHandler {
        protected function getContentClass() {
            return 'MyContent';
        }
    }
    class MyContent extends WikitextContent {
        // TODO: override preSaveTransform() here
    }
    
  2. 在内容子类中,覆盖preSaveTransform()方法,例如像这样(如果你想在正常的PST通过后修改wikitext):

    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. 使用LocalSettings.php中的$wgContentHandlers将新的ContentHandler注册为普通维基页面的处理程序:

    $wgContentHandlers[CONTENT_MODEL_WIKITEXT] = 'MyContentHandler';
    
  4. (警告:我相信这种方法应该可行,但我实际上没有测试过!请自行承担风险。欢迎改进和错误报告。)

答案 1 :(得分:1)

签名的替换为hard-coded in mediawiki/core

我不知道如何在不改变核心文件的情况下做同样的事情(顺便说一下,这不是一个好主意)。您可以使用parser function或创建tag extension来以类似的方式实现您想要的目标。