美文网首页
MediaWiki创建页面内容模型基础

MediaWiki创建页面内容模型基础

作者: PurySun | 来源:发表于2021-01-21 15:35 被阅读0次

创建MediaWiki页面内容模型,开发扩展来实现,包含三个必要文件。

例:自定义名称Goat。

  • extension.json。扩展配置文件。
  • GoatContent.php。内容管理器。
  • GoatContentHandler.php。控制器。

注册扩展

"ContentHandlers": {
    "goat": "MediaWiki\\Extension\\GoatExt\\GoatContentHandler"
}

创建内容模型

"namespaces": [
    {
        "id": 555,
        "constant": "NS_GOAT",
        "name": "Goat",
        "subpages": false,
        "content": true,
        "defaultcontentmodel": "goat"
    },
    {
        "id": 556,
        "constant": "NS_GOAT_TALK",
        "name": "Goat_talk",
        "subpages": true,
        "content": false,
        "defaultcontentmodel": "wikitext"
    }
]

添加内容管理器和控制器

<?php

namespace MediaWiki\Extension\GoatExt;

class GoatContentHandler extends \ContentHandler {

    public function __construct( $modelId = 'goat' ) {
        parent::__construct( $modelId, [ CONTENT_FORMAT_TEXT ] );
    }

    public function serializeContent( \Content $content, $format = null ) {
    }

    public function unserializeContent( $blob, $format = null ) {
    }

    public function makeEmptyContent() {
        return new GoatContent();
    }

    public function supportsDirectEditing() {
        return true;
    }
}
<?php

namespace MediaWiki\Extension\GoatExt;

class GoatContent extends \AbstractContent {

    public function __construct( $modelId = 'goat' ) {
        parent::__construct( $modelId );
    }

    public function getTextForSearchIndex() {
    }

    public function getWikitextForTransclusion() {
    }

    public function getTextForSummary( $maxLength = 250 ) {
    }

    public function getNativeData() {
    }

    public function getSize() {
    }

    public function copy() {
    }

    public function isCountable( $hasLinks = null ) {
    }

    public function getName() {
        return 'Garry';
    }
}
内置模版如图:

上面代码是官方文档内容,建议复制一组出来,在其基础上修改。文档讲的很笼统,加上版本差异,实际操作起来还是需要一些功底的。

简单总结:先写配置文件,然后添加两个php模版文件,再接着开发功能。

整理了一个基础模版拓展,拿过来可以直接用。内容模型直接用的原版JSON模型(版本1.30)。在LocalSettings.php中添加后便能看到效果。

wfLoadExtension( 'Goat' );

GitHub地址:Goat Demo

参考配置文件:

{
    "name": "Goat",
    "author": [ "Pury" ],
    "type": "other",
    "requires": {
        "MediaWiki": ">= 1.30.0"
    },
    "ContentHandlers": {
        "goat": "GoatContentHandler"
    },
    "namespaces": [
        {
            "id": 467,
            "constant": "NS_GOAT",
            "name": "Goat",
            "subpages": false,
            "content": true,
            "defaultcontentmodel": "goat"
        },
        {
            "id": 468,
            "constant": "NS_GOAT_TALK",
            "name": "Goat_talk",
            "subpages": true,
            "content": false,
            "defaultcontentmodel": "wikitext"
        }
    ],
    "AutoloadClasses": {
        "GoatContent": "GoatContent.php",
        "GoatContentHandler": "GoatContentHandler.php"
    },
    "manifest_version": 1
}

官方推荐示例拓展:examples,有详细注释,有些用法未必是最优解,不包含任何编辑功能,可以参考看看。

官方文档:页面内容模型

相关文章

网友评论

      本文标题:MediaWiki创建页面内容模型基础

      本文链接:https://www.haomeiwen.com/subject/nrfdzktx.html