美文网首页
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