mediawiki 1.21.1版本二次开发的问题集

常见错误:

数据库错误


发生数据库查询语法错误。可能是由于软件自身的错误所引起。最后一次数据库查询指令是:
(SQL查询已隐藏)
来自于函数“ Revision::insertOn”。数据库返回错误“ 1048: Column 'old_id' cannot be null (localhost)”。


原因是因为

mysqldump导数据加参数--skip-opt后无自增列auto_increment  

导致了includes/Revision.php的1267行插入的时候,执行类似:

$old_id = $dbw->nextSequenceValue( 'text_old_id_seq' );
$dbw->insert( 'text',
array(
'old_id'    => $old_id,
'old_text'  => $data,
'old_flags' => $flags,
), __METHOD__
);

includes/Database.php插入异常;

重新导入:
mysqldump -uuser -ppassword -hhostname -Pport --skip-opt -R --quick --add-drop-table --add-locks  --create-options --extended-insert wiki > wiki.sql

版本: 1.21.1
发布模式: 正式wiki接入TGW,正式wiki展示端删除常见的一些敏感操作,比如登录,页面编辑等功能;管理端部署在一台IDC,通过HOSTS访问;测试WIKI同样分为展示端和管理端,部署在同一台服务器,采用同一套代码,只是分别进行不同的功能改造;
默认皮肤:vector
重要改造:左侧支持III级菜单展示,原生的mediawiki只支持到II级菜单;这里需要改造输入和输出解析;最重要的函数:

/includes/Skin.php文件:addToSidebarPlain(用来解析用户通过点击默认页面输入的导航列表**wiki.qq.com/index.php?title=MediaWiki:Sidebar&action=edit),原生语法有些重复,于是我自定义了编写的语法,类似:

1 新手指引
1.1 游戏接入流程
1.2 平台简介
1.3 游戏接入流程
2 政策与规范
2.1 游戏接入规范 
2.1.1 腾讯移动游戏平台首发协议
2.1.2 腾讯移动游戏平台开发者协议
2.3 游戏审核规范和流程

主要是字符串解析为相应的数组;然后读取出来;
其中关键的key为href,例如:

$menuArr[$firstKey][$secondKey][$v] = array(
    'text' => $v,
    'href' => '/index.php/' . urlencode($v),
);
这里是为了在后台解析数组是否有href这个key,用来区分二级菜单数组和三级菜单数组的区别,原生的实现是通过解析key和val,生成一个

  • 这样的模式,但是如果有III级,这里的val就无法解析为链接方式,所以通过href可以过滤III级菜单,如果想在后台增加一个快速链接到后台编辑功能,在Vector.php皮肤文件中找到renderNavigation()方法,VIEW中增加


左侧栏编辑
即可;

(详见/skins/Vector.php文件中的renderPortal方法);

对于需要获取的各种数据,可以在SkinTemplate.php文件中outputPage()进行相应的设置;
总体而言,最重要的几个文件:Skin.php,皮肤文件例如Vector.php,M->V的转化层文件SkinTemplate.php模板类文件;
希望之后有同学想使用mediawiki的时候,看到这篇文章,能给大家一个初步的参考,谢谢!如果想直接用我的代码,可以和我联系,如果mediawiki能够写个什么插件,我肯定弄个(直接部署就可以使用);





你可能感兴趣的:(PHP)