How to become a MediaWiki hacker/zh
| Language: | English • dansk • Deutsch • Zazaki • français • Bahasa Indonesia • 日本語 • 한국어 • occitan • polski • português do Brasil • српски / srpski • Türkçe • 中文 |
|---|
- 以下的一些资料可能会过时或不正确。如果你熟悉以下的内容,请尝试帮助我们更新这篇文章。
如何成为一名 MediaWiki 的参与者 会提供有关 MediaWiki 开发的过程的网页链接和相关的解释,并帮助新参于进来的开发者解答一些疑惑。如果您想帮助我们开发这套系统,但却对不知道如何参与其中,那么这篇文章可以帮助您。
Contents |
基础知识 [edit]
- 邮件列表: 系统开发列表 wikitech-l , 客户服务列表 mediawiki-l , SVN 消息列表 mediawiki-cvs , 升级和补丁列表 wikibugs-l
- Manual:Database layout 数据表结构
- BugZilla 是提交 MediaWiki 的bug和功能的地方
- Security for developers 有关安全的文档
- Manual:Coding conventions 代码编写格式规范
操作系统 [edit]
MediaWiki 是 PHP 编写的,并使用 MySQL 作为数据库。两者都被移植到多种操作系统上,包括但不仅限于,大多数的 UNIX 派生版本和 Microsoft Windows 系统。因此, MediaWiki 可以被安装到这些系统上。注意:如果你是用 Windows 系统的话, MediaWiki 中一些依懒于Unix系统工具的功能可能会用不了,或者需要您自己另外下载和安装。而操作系统本身的bug也可能会影响 MediaWiki 的正常运作,所以您可能需要对您所使用的操作系统平台有所了解。
PHP 编程语言 [edit]
如果您没有 PHP (超文本预处理器的简称)的开发经验,但懂得用其它种类的面向对象编程语言的话,那么上手学习PHP也很容易。
如果您没有任何关于 PHP 或者其它面向对象编程语言的开发经验的话,您得很熟悉一下有关 类, 对象、 方法, 事件 and 继承等概念
如果你从来没有过编程的经验,可以从 PHP 开始学习编程,尽管它的执行方式比较独特,但它和其它编程语言有很多相似的地方。
PHP 脚本可以通过命令行来或者一些能调用其解析器的图形界面来运行。以下是一个 Linux/UNIX 系统的例子:
/usr/bin/php -q < phpshell.php
对于一个网站来说,一般当您请求一个后缀为 .php 的文件时,网站服务器就执行这个 PHP 脚本。具体来说,像这里的 PHP 脚本那样,一个叫Apache的服务器端软件会调用 PHP 解析器来解析并执行 PHP 脚本,最后返回输出结果到浏览器端。PHP 文件可以包含普通的 HTML 代码和 PHP 代码,使得它能够很容易的为静态的页面添加动态的内容。
相关链接 [edit]
- PHP 教程 (多语种)
- The PHP 手册 (多语种)
- Wikibooks 上的 PHP
数据库 [edit]
MediaWiki 将 MySQL 作为首选的数据库。它还支持其他的数据库,例如 PostgreSQL。开发人员通常尽在 MySQL 上测试而忽略其他数据库,这很容易导致一些简单的操作都不能通过。
安装 MediaWiki [edit]
你可以从 SVN 获取到最新的代码,详情请参阅 从 SVN 下载一节。
源代码中的 INSTALL 文件会指导你安装,或者阅读安装指南。
开发 MediaWiki 不需要下载 Wikipedia 的数据库。使用全新的数据库来开发往往更容易。如果处于某种原因,确实需要 Wikipedia 的副本,可以从 meta:data dumps 获取。
你可能会看到一个禁止访问数据库的错误窗口,请检查是否在 MediaWiki 安装目录的上层目录创建了一个 AdminSettings.php 的文件(该文件应该与 LocalSettings.php 在同一个目录下)。你可以自行修改 AdminSettings.php 的内容,确保填写了正确的 MySQL 用户名和密码。
重新创建一次链接表会花费很长时间,尤其是当你安装了英文版的 Wikipedia 数据库。
注意:创建一份公开的 Wikipedia 镜像站点不是一个很好的方式。如果你确实这么做了,请调整代码,以告知用户正在浏览一个镜像,并且将链接指回原站。更多内容请访问 Forks and Mirrors。
MediaWiki 代码结构 [edit]
MediaWiki 的代码又长又难看,所以尽量不要重写。当你开始进入开发的时候,请将目标定位于完善功能或者修复错误,这些只需要修改少量的代码。
你可以浏览 自动生成的文档。警告:页面很大,加载会花费一段时间。
了解 MediaWiki 最好的办法就是阅读源码。可以从下面的这些文档入手:
- index.php 是主要的起始点,虽然看不出什么都系从这里传进去。
- Article.php 提供页面查看、删除、回滚、监视以及取消监视的功能。它还提供了其他的一些处理文章的功能,比如获取特定版本的文章、保存页面。
- EditPage.php 包含了所有修改功能中接近一半的代码。这一部分是最接近用户交互的。其他的修改功能存放在 Article.php 和各个 *Update.php 文件中。
- Parser.php 的主要作用是将 wiki 语法转换成 HTML 页面。少量的内容被存放到了 Skin.php 中。
- Linker.php 提供了生成超链接和图片链接的功能。
- 绝大多数特殊页面的代码存放在 /specials/ 目录下的 Special*.php 文件中。
- Database.php 提供了访问数据库需要的代码。
- OutputPage.php is the home of the OutputPage class, which is an output buffer. Send your text here and it will be sent to stdout just before the script exits.
- Title.php is all about titles -- and that includes interwiki titles and "#" fragments. There are some functions in here that will fetch information about an article from the database.
- User.php 包括了用户类,比如用户偏好设定以及权限。
- UserMailer.php,包括了发送邮件需要的一些静态方法。
- Setup.php does all sorts of initialisation, and seems to account for a large proportion of running time. Among other things, it initialises lots of global variables, mostly containing objects.
- DefaultSettings.php 包含了很多全局变量的初始值,这些变量通常不会在LocalSettings.php被复写。不要调用
isset()方法,该方法会向你调用的全局变量增加初始值。
创建第一个功能 [edit]
这里包含了一些想法:
- 添加一些让你感兴趣的功能;
- 修复一个 烦人的小bug;
- 在特殊页面中提供一些便捷信息;
- 写一个 parser hook;
- 写一个 简单的插件。
寻求更多帮助,请到#mediawiki和其他开发人员交流。如果你已经有一个清晰的想法,同样,可以在开始实现之前和有经验的开发人员聊聊,尤其是当你不确定你的代码会对系统产生什么影响的时候。
当你准备好实现功能的时候,可以来申请 SVN 写入权限。或者你可以在 Bugzilla 中发布一个补丁。这可能是一个很慢的过程,但是坚持这么做一两次,可以证明你的诚意和书写稳定代码的能力。在提交的时候,请确保你的代码可以很容易的被禁止。
请不要询问访问 Wikimedia 服务器的 shell 权限。shell 权限只会提供给我们真正信任的人们。
测试 [edit]
在 php.ini 中使用 E_STRICT,这样你就不会看到非重要的警告和提醒。
当增加功能的时候,请不要破坏现有的方法。通常可以使用自动化测试框架来帮助验证。不幸的是,适用于 MediaWiki 的测试套件不多。我们推荐这样三个测试套件:
- Parse tests
- PHPUnit-based unit tests
- Selenium
如果不能书写自动化测试,请执行手工测试。如果你的代码常常出问题,别人会很反感你,尤其是直到它出现在 Wikipedia 上的时候。
发布补丁 [edit]
如果你创建并测试了一个补丁,可以通过以下命令获取到修改的地方:
svn diff path/to/modified_file.php > my.patch
然后将这个补丁以附件的方式提交。
参考 [edit]
| This is an incomplete translation of a lingual variant of this page. Complete translation may take an extended period of time. |