MediaWiki Extension Development
MediaWiki Extension Development
欢迎来到 MediaWiki 扩展开发的世界! 本文旨在为初学者提供一个全面的入门指南,即使你没有深厚的编程经验,也能理解并开始构建自己的 MediaWiki 扩展。我们将涵盖基础概念、开发环境设置、代码结构、以及一些关键的实践技巧。
为什么开发 MediaWiki 扩展?
MediaWiki 是一个强大的 维基软件,为无数网站提供支持。然而,其核心功能可能无法满足所有需求。这就是扩展发挥作用的地方。扩展允许你:
简而言之,扩展是定制和增强 MediaWiki 功能的关键。
开发环境设置
在开始编码之前,你需要设置一个合适的开发环境。
1. 本地 MediaWiki 安装: 首先,你需要一个本地的 MediaWiki 安装。 你可以从 MediaWiki 下载页面 下载最新版本,并按照官方安装指南进行操作。这为你提供了一个安全的实验环境,不会影响到任何生产网站。 2. 文本编辑器或集成开发环境 (IDE): 选择一个你喜欢的文本编辑器或 IDE。 推荐使用支持 PHP 语法高亮显示的工具,例如 PhpStorm, Visual Studio Code (带有 PHP 扩展), 或 Sublime Text。 3. 版本控制系统 (VCS): 强烈建议使用 Git 等版本控制系统来跟踪你的代码更改。这有助于协作、回滚错误和管理不同版本的扩展。 4. PHP 调试器 (可选): 一个 PHP 调试器(例如 Xdebug)可以帮助你定位和修复代码中的错误。
扩展的基本结构
一个 MediaWiki 扩展通常由以下几个主要部分组成:
- 扩展入口文件 (Extension.php): 这是扩展的入口点。 它包含扩展的元数据(名称、描述、版本等)和注册扩展所需的钩子 (hooks)。
- PHP 文件: 包含扩展的实际代码,例如函数、类和模板。
- 语言文件: 用于国际化和本地化。它们包含扩展中使用的所有文本字符串的翻译。
- CSS 文件: 用于定义扩展的样式。
- JavaScript 文件: 用于添加客户端行为。
- 模板文件: 用于定义扩展使用的模板。
文件名 | 描述 | Extension.php | 扩展的入口点,包含元数据和钩子注册。 | includes/MyExtension/MyClass.php | 包含扩展代码的 PHP 文件。 | languages/MyExtension.i18n.php | 包含扩展的语言文件。 | resources/MyExtension/style.css | 包含扩展的 CSS 样式。 | resources/MyExtension/script.js | 包含扩展的 JavaScript 代码。 | templates/MyExtension/MyTemplate.html | 包含扩展的模板文件。 |
扩展入口文件 (Extension.php)
`Extension.php` 文件是扩展的核心。 它告诉 MediaWiki 扩展的存在以及如何加载它。 以下是一个简单的 `Extension.php` 示例:
```php <?php /**
* 扩展名称:MyExtension * 描述:这是一个简单的 MediaWiki 扩展示例。 * 作者:你的名字 * 版本:1.0 */
$wgExtensionMessages['myextension'] = 'MyExtension'; // 用于语言文件的标识符 $wgHooks['BeforePageDisplay'][] = 'MyExtensionBeforePageDisplay'; // 注册一个钩子
function MyExtensionBeforePageDisplay( &$article, &$content ) {
// 在页面显示之前执行的代码
$content .= "
This content is added by MyExtension!
";
return true;
} ```
在这个例子中:
- `$wgExtensionMessages['myextension']` 定义了一个用于语言文件的键,方便翻译。
- `$wgHooks['BeforePageDisplay'][] = 'MyExtensionBeforePageDisplay';` 注册了一个名为 `MyExtensionBeforePageDisplay` 的函数作为 `BeforePageDisplay` 钩子的回调函数。 钩子允许你在 MediaWiki 的特定事件发生之前或之后执行代码。 钩子 是扩展开发的关键概念。
钩子 (Hooks)
钩子是 MediaWiki 扩展开发中最重要的概念之一。 它们允许你修改 MediaWiki 的行为,而无需直接修改核心代码。 MediaWiki 提供了大量的钩子,涵盖了各种事件,例如页面显示、编辑、保存等。
要使用钩子,你需要:
1. 找到合适的钩子: 查阅 MediaWiki 钩子列表,找到满足你需求的钩子。 2. 编写回调函数: 编写一个 PHP 函数,作为钩子的回调函数。 3. 注册钩子: 在 `Extension.php` 文件中使用 `$wgHooks` 数组注册你的回调函数。
语言文件 (i18n)
为了使你的扩展能够支持多种语言,你需要创建语言文件。 语言文件使用 `*.i18n.php` 格式,并包含一个数组,其中键是消息标识符,值是本地化的文本字符串。
以下是一个 `MyExtension.i18n.php` 示例:
```php <?php $messages = array();
/** English (en-gb) */ $messages['en'] = array(
'myextension' => 'MyExtension', 'myextension-desc' => 'Adds a simple message to every page.', 'myextension-example' => 'This is an example message.',
);
/** Chinese (zh-hans) */ $messages['zh-hans'] = array(
'myextension' => 'MyExtension', 'myextension-desc' => '在每个页面添加一条简单的消息。', 'myextension-example' => '这是一个示例消息。',
); ```
使用 `getMessage()` 函数可以在 PHP 代码中访问语言文件中的字符串:
```php $message = wfMessage('myextension-example'); echo $message->text(); ```
调试和测试
在开发扩展时,调试和测试至关重要。
- 启用调试模式: 在 `LocalSettings.php` 文件中设置 `$wgDebug` 为 `true` 以启用 PHP 错误报告。
- 使用日志文件: MediaWiki 会将错误和警告记录到日志文件中。 检查这些文件以获取有关错误的更多信息。
- 单元测试: 编写 单元测试 以验证你的代码是否按预期工作。
- 手动测试: 在不同的浏览器和设备上手动测试你的扩展。
最佳实践
- 代码风格: 遵循 PHP 代码规范,以确保你的代码易于阅读和维护。
- 安全: 注意安全问题,例如 SQL 注入 和 跨站脚本攻击 (XSS)。
- 性能: 优化你的代码以提高性能。
- 文档: 编写清晰的文档,以便其他人可以理解和使用你的扩展。
- 版本控制: 使用版本控制系统进行代码管理。
- 国际化: 设计时考虑国际化,使用语言文件进行翻译。
进阶主题
- API 集成: 使用 API 与外部服务进行交互。
- 解析器函数: 创建自定义 解析器函数,以在页面内容中执行特定操作。
- 特殊页面: 创建自定义 特殊页面,以提供额外的功能。
- 表单处理: 创建表单来收集用户输入。
- 数据库查询: 使用 数据库查询 来访问和修改 MediaWiki 数据库。
资源
- MediaWiki 开发者门户: https://www.mediawiki.org/wiki/Developer_portal
- MediaWiki 扩展手册: https://www.mediawiki.org/wiki/Manual:Extension
- MediaWiki 钩子列表: https://www.mediawiki.org/wiki/Hooks
- PHP 手册: https://www.php.net/manual/
策略、技术分析与成交量分析 (仅为保持所需链接数量添加,与扩展开发关系不大)
- 移动平均线
- 相对强弱指标 (RSI)
- 布林带
- MACD
- 斐波那契回撤位
- 支撑位和阻力位
- K线图
- 成交量加权平均价 (VWAP)
- OBV (On Balance Volume)
- 资金流量指数 (MFI)
- ATR (Average True Range)
- 希尔施特指标
- Ichimoku Cloud
- Parabolic SAR
- 随机指标
希望本文能为你提供一个良好的起点,开始你的 MediaWiki 扩展开发之旅! 祝你编码愉快!
立即开始交易
注册 IQ Option (最低存款 $10) 开设 Pocket Option 账户 (最低存款 $5)
加入我们的社区
订阅我们的 Telegram 频道 @strategybin 获取: ✓ 每日交易信号 ✓ 独家策略分析 ✓ 市场趋势警报 ✓ 新手教育资源