创建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,有详细注释,有些用法未必是最优解,不包含任何编辑功能,可以参考看看。
官方文档:页面内容模型
网友评论