MediaWiki 扩展开发
MediaWiki 扩展开发
MediaWiki 是一个强大的、开源的 维基软件,驱动着包括维基百科在内的众多网站。它的核心功能可以通过 扩展 进行扩展和定制,以满足特定需求。本文旨在为初学者提供一份全面的 MediaWiki 扩展开发指南。
1. 扩展开发基础
在开始编写扩展之前,需要了解一些基础知识。
- PHP 编程语言: MediaWiki 扩展是用 PHP 编写的。因此,对 PHP 的熟练掌握是必要的。你需要熟悉变量、数据类型、函数、类、对象以及面向对象编程的概念。
- MediaWiki API: MediaWiki 提供了丰富的 API,用于访问和操作维基数据。了解这些 API 是开发扩展的关键。可以参考 MediaWiki API 文档。
- MediaWiki 架构: 理解 MediaWiki 的架构,包括 核心类、钩子、配置系统 和 皮肤,有助于更好地开发和维护扩展。
- 开发环境: 建议使用本地开发环境进行扩展开发。可以使用 XAMPP、MAMP 或 Docker 等工具搭建。
2. 扩展结构
一个典型的 MediaWiki 扩展包含以下文件:
- Extension.json: 扩展的元数据文件,包含扩展名称、版本、描述、作者等信息。这是 MediaWiki 1.32 及以上版本推荐的扩展定义方式。
- *.php 文件: 包含扩展的核心代码,例如 特殊页面、标签、钩子处理函数 等。
- *.css 文件: 包含扩展的样式表,用于定制扩展的界面。
- *.js 文件: 包含扩展的 JavaScript 代码,用于增强扩展的交互性。
- i18n/en.json (或其他语言文件): 包含扩展的国际化文本,用于支持多种语言。
文件名 | 描述 | Extension.json | 扩展元数据 | Special:MyExtension.php | 特殊页面定义 | Tag:MyExtensionTag.php | 标签定义 | hooks/MyExtensionHooks.php | 钩子处理函数 | MyExtension.css | 扩展样式表 | MyExtension.js | 扩展 JavaScript | i18n/en.json | 英文国际化文件 |
3. 创建第一个扩展
让我们创建一个简单的扩展,用于在页面底部添加自定义文本。
1. 创建扩展目录: 在 MediaWiki 的 `extensions/` 目录下创建一个名为 `MyFirstExtension` 的目录。 2. 创建 Extension.json: 在 `MyFirstExtension` 目录下创建一个名为 `Extension.json` 的文件,内容如下:
```json {
"name": "MyFirstExtension", "version": "1.0", "description": "A simple extension to add custom text to the page footer.", "author": "Your Name", "url": "https://example.com", "license": "GPL-2.0+"
} ```
3. 创建 MyFirstExtension.php: 在 `MyFirstExtension` 目录下创建一个名为 `MyFirstExtension.php` 的文件,内容如下:
```php <?php
class MyFirstExtension {
public static function addFooterText( $out ) {
$out->addFooter('
This text was added by MyFirstExtension.
');
return true; }
}
$wgHooks['OutputPage::addFooter'][] = 'MyFirstExtension::addFooterText';
?> ```
4. 启用扩展: 在 MediaWiki 的 `LocalSettings.php` 文件中,添加以下代码:
```php wfLoadExtension( 'MyFirstExtension' ); ```
5. 测试扩展: 刷新维基页面,你应该能在页面底部看到自定义文本。
4. 钩子 (Hooks)
钩子 是 MediaWiki 扩展开发中最重要的概念之一。它们允许你在 MediaWiki 的特定事件发生时执行自定义代码,而无需修改核心代码。
- OutputPage::addFooter: 如上例所示,用于在页面底部添加内容。
- ArticleSavePre: 在文章保存之前触发,可以用于验证或修改文章内容。
- UserLoginComplete: 在用户登录完成后触发,可以用于执行自定义操作。
- BeforeDisplayNoarticle: 在显示不存在的文章页面之前触发。
- LoadExtensionSchema: 用于定义扩展所需的数据库表。
可以参考 MediaWiki 钩子列表 了解更多钩子。
5. 特殊页面 (Special Pages)
特殊页面 是 MediaWiki 提供的一种特殊的页面类型,用于执行管理任务或提供特殊功能。
- 定义特殊页面: 使用 `SpecialPage` 类定义特殊页面。
- 注册特殊页面: 使用 `wfSpecialPages` 数组注册特殊页面。
- 处理特殊页面请求: 在特殊页面的 `execute()` 方法中处理用户请求。
6. 标签 (Tags)
标签 允许你插入自定义 HTML 或 PHP 代码到维基页面中。
- 定义标签: 使用 `Tag` 类定义标签。
- 注册标签: 使用 `wfHooks['ParserBeforeTidy']` 钩子注册标签。
- 处理标签内容: 在标签的处理函数中解析和渲染标签内容。
7. 国际化 (Internationalization)
为了使你的扩展能够支持多种语言,需要进行国际化。
- 使用 i18n 目录: 在扩展目录中创建一个名为 `i18n` 的目录。
- 创建语言文件: 在 `i18n` 目录中创建语言文件,例如 `en.json`、`zh.json` 等。
- 使用消息 ID: 在 PHP 代码中使用消息 ID 来引用国际化文本。例如:`wfMessage( 'myextension.messageid' )->text()`。
- 使用 translatewiki.net: 可以使用 translatewiki.net 来翻译你的扩展。
8. 安全性考虑
在开发 MediaWiki 扩展时,安全性至关重要。
- 输入验证: 始终验证用户输入,防止 SQL 注入、跨站脚本攻击 (XSS) 等安全漏洞。
- 权限控制: 确保只有授权用户才能访问敏感功能。
- 代码审查: 进行代码审查,发现潜在的安全问题。
- 使用 MediaWiki 安全函数: 使用 MediaWiki 提供的安全函数,例如 `htmlspecialchars()`、`wfSanitize()` 等。
9. 调试和测试
- 启用调试模式: 在 `LocalSettings.php` 文件中设置 `$wgDebug` 为 `true`。
- 查看错误日志: 查看 MediaWiki 的错误日志文件,查找错误信息。
- 使用调试工具: 使用 PHP 调试工具,例如 Xdebug。
- 编写单元测试: 编写单元测试,确保扩展的功能正常。
10. 扩展发布和维护
- 打包扩展: 将扩展文件打包成 ZIP 格式。
- 发布到 MediaWiki 扩展目录: 可以将扩展发布到 MediaWiki 扩展目录。
- 维护扩展: 定期更新扩展,修复 bug,并添加新功能。
附加资源
---
考虑到二元期权领域的专业背景,以下链接与相关策略、技术分析和成交量分析相关,以体现专业性。虽然与 MediaWiki 扩展开发本身没有直接关系,但可以作为知识拓展:
- 移动平均线 (Moving Average)
- 相对强弱指数 (RSI)
- 布林带 (Bollinger Bands)
- MACD 指标
- 斐波那契回调线 (Fibonacci Retracement)
- 支撑位和阻力位 (Support and Resistance)
- K 线图 (Candlestick Chart)
- 交易量加权平均价 (VWAP)
- 资金流量指数 (MFI)
- 抛物线转向点 (Parabolic SAR)
- 随机指标 (Stochastic Oscillator)
- 期权希腊字母 (Option Greeks)
- 波动率 (Volatility)
- 风险回报比 (Risk/Reward Ratio)
- 套利交易 (Arbitrage)
立即开始交易
注册 IQ Option (最低存款 $10) 开设 Pocket Option 账户 (最低存款 $5)
加入我们的社区
订阅我们的 Telegram 频道 @strategybin 获取: ✓ 每日交易信号 ✓ 独家策略分析 ✓ 市场趋势警报 ✓ 新手教育资源