MediaWiki自定义页面内容模型基础

最基础最核心的内容模型只需要三个文件。自定义名称Goat,php文件创建后在配置中AutoloadClasses加入。

  1. extension.json。扩展配置文件。
  2. GoatContent.php。内容管理器。
  3. 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)。

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模版,里面有详细注释,有些用法不如配置来的直接,不包含编辑功能。

官方文档:页面内容模型