增强您的 MediaWiki 导航菜单
自定义 MediaWiki 导航菜单可以显着增强用户体验,从而提供更易于访问和更实用的工具。如果您运行的是具有 Timeless 主题的 MediaWiki 1.39,您可能会发现添加特定选项(例如“可打印版本”)具有挑战性。由于侧边栏菜单的独特配置,这项任务并不简单。
管理员的一个共同目标是为用户提供一种快速访问可打印页面的方法。对于经常引用离线或硬拷贝材料的环境(例如学术或企业维基),此功能至关重要。然而,许多人发现这个过程不如预期直观。 🖨️
在本指南中,我们将探讨如何将“可打印版本”链接合并到导航菜单中,特别是在“随机页面”选项下。使用 MediaWiki:Sidebar 进行修改需要对其在 Timeless 主题中的语法和行为有深入的了解。
如果您遇到困难或遇到问题,请不要担心!在本演练结束时,您不仅会知道如何实施更改,还会深入了解 MediaWiki 侧边栏的功能。让我们深入研究一下这个实用的增强功能。 🌟
命令 | 使用示例 |
---|---|
$wgHooks['SkinBuildSidebar'][] | 此命令在 MediaWiki 中注册一个自定义挂钩,允许在渲染期间修改侧边栏结构。它专门用于动态自定义导航菜单。 |
$skin->$skin->msg() | 检索 MediaWiki 中的本地化消息或链接。在此上下文中,它使用内置语言设置动态获取“可打印版本”功能的 URL。 |
document.addEventListener('DOMContentLoaded') | 确保 JavaScript 逻辑仅在 DOM 完全加载后执行,这对于动态修改现有导航菜单至关重要。 |
document.createElement() | 创建新的 HTML 元素,例如 li 和 a 标签,这些元素将动态添加到前端解决方案中的导航菜单中。 |
arrayHasKey | 在单元测试中用于验证数组中是否存在特定键,确保“可打印版本”选项已正确添加到侧边栏结构中。 |
if (!defined('MEDIAWIKI')) | 确保脚本在 MediaWiki 框架内执行,防止未经授权或独立执行。 |
$GLOBALS['wgHooks'] | 访问 MediaWiki 中的全局挂钩,使开发人员能够在应用程序生命周期的特定点动态添加或修改功能。 |
link.href | 在 JavaScript 中动态设置新创建的超链接的 URL,添加查询参数(如 ?printable=yes)以激活可打印版本。 |
SkinBuildSidebar | 特定的 MediaWiki 挂钩,允许直接操作侧边栏元素,使其与添加新链接或菜单项高度相关。 |
TestCase::createMock() | 创建用于单元测试的模拟对象,模拟 MediaWiki 的 Skin 类来验证侧边栏修改,而不需要完整的 MediaWiki 实例。 |
如何自定义 MediaWiki 导航菜单
上面提供的脚本侧重于通过在“随机页面”链接下方添加“可打印版本”选项来增强 MediaWiki 导航菜单。这种修改可以通过使用钩子的后端定制或使用 JavaScript 的前端脚本来实现。例如,PHP 脚本利用 $wgHooks 数组和“SkinBuildSidebar”挂钩来动态插入新的导航项。这种方法确保添加内容与现有侧边栏结构无缝集成,适应不同的皮肤,例如 Timeless 主题。 🖥️
前端 JavaScript 解决方案提供了一种更加动态的替代方案,在 DOM 完全加载后定位导航菜单。通过使用类似的命令 文档.createElement 并将新创建的列表项附加到导航菜单中,此方法不需要修改后端代码。例如,大学维基百科可以快速部署“可打印版本”功能,供学生访问课程材料,确保对实时站点的干扰最小化。这种灵活性使其成为后端访问受限或不可用的情况的理想选择。 📄
所提供脚本的另一个关键方面是它们的模块化性和对最佳实践的关注。 PHP 脚本包含错误处理,以确保它仅在 MediaWiki 框架内运行。同样,JavaScript 逻辑会在尝试修改导航菜单之前验证其是否存在,从而降低运行时错误的风险。例如,在企业维基中,确保可靠性至关重要,因为侧边栏通常是员工访问项目文档或报告的中央导航中心。
单元测试通过验证“可打印版本”链接是否在不同场景中正确添加来补充脚本。通过使用模拟对象模拟 MediaWiki 环境,这些测试可确保解决方案在各种配置下工作。此测试过程对于管理多个 wiki 的开发人员特别有价值,因为它提供了针对部署问题的保障。最终,无论是通过 PHP 后端挂钩、前端 JavaScript 还是强大的单元测试,这些脚本都提供了多种方法来增强 MediaWiki 导航,并具有最佳性能和可靠性。 🌟
在 MediaWiki 导航中添加“可打印版本”选项
使用 PHP 修改 MediaWiki 侧边栏配置的服务器端脚本。
<?php
// Load MediaWiki's core files
if ( !defined( 'MEDIAWIKI' ) ) {
die( 'This script must be run from within MediaWiki.' );
}
// Hook into the Sidebar generation
$wgHooks['SkinBuildSidebar'][] = function ( &$sidebar, $skin ) {
// Add the "Printable version" link below "Random page"
$sidebar['navigation'][] = [
'text' => 'Printable version',
'href' => $skin->msg( 'printable' )->inContentLanguage()->text(),
'id' => 'n-printable-version'
];
return true;
};
// Save this script in a custom extension or LocalSettings.php
?>
使用 MediaWiki 侧边栏配置添加新链接
手动编辑 MediaWiki:Timeless 主题中的侧边栏页面的方法。
* navigation
mainpage|mainpage-description
recentchanges-url|recentchanges
randompage-url|randompage
printable-version|Printable version
* SEARCH
* TOOLBOX
// Save changes in the MediaWiki:Sidebar special page.
// Ensure "printable-version" message key is properly defined.
动态前端 JavaScript 解决方案
使用 JavaScript 的客户端脚本动态添加“可打印版本”选项。
document.addEventListener('DOMContentLoaded', function () {
const navList = document.querySelector('.mw-portlet-navigation ul');
if (navList) {
const printableItem = document.createElement('li');
printableItem.id = 'n-printable-version';
const link = document.createElement('a');
link.href = window.location.href + '?printable=yes';
link.textContent = 'Printable version';
printableItem.appendChild(link);
navList.appendChild(printableItem);
}
});
侧边栏修改的单元测试
PHP 单元测试以验证后端的“可打印版本”集成。
use PHPUnit\Framework\TestCase;
class SidebarTest extends TestCase {
public function testPrintableVersionLinkExists() {
$sidebar = []; // Simulate Sidebar data structure
$skinMock = $this->createMock(Skin::class);
$callback = $GLOBALS['wgHooks']['SkinBuildSidebar'][0];
$this->assertTrue($callback($sidebar, $skinMock));
$this->assertArrayHasKey('Printable version', $sidebar['navigation']);
}
}
// Run using PHPUnit to ensure robust testing.
通过高级自定义增强 MediaWiki
向 MediaWiki 实例添加自定义功能不仅仅是简单的导航菜单修改。例如,管理员经常寻求增强功能以满足特定用户需求的方法,例如集成导出选项或根据用户角色自定义布局。这些增强功能,包括添加“可打印版本”,对于使 wiki 更加动态和用户友好至关重要。新链接的整合 MediaWiki 侧边栏 可以根据大学门户或公司内部文档的独特要求进行定制。
值得探索的一个领域是新添加的菜单选项的本地化。例如,确保根据用户的语言偏好动态翻译“可打印版本”标签会增加一层包容性。使用 MediaWiki 的内置本地化方法,例如 $skin->msg(),允许开发人员将其定制与 MediaWiki 的全球标准保持一致。这对于员工或贡献者以多种语言访问 wiki 的跨国组织特别有用。 🌍
另一个重要的考虑因素是定制和所选 MediaWiki 主题之间的交互。这 永恒的主题例如,使用独特的结构,需要彻底测试任何更改以确保兼容性。例如,视觉上突出的导航元素(如“可打印版本”)可能需要额外的 CSS 调整才能在不同设备上保持其外观。这些细致入微的修改可确保无论用户的设备或屏幕尺寸如何,界面都保持直观和专业。 📱
关于 MediaWiki 定制的常见问题
- 如何编辑 MediaWiki 侧边栏?
- 您可以通过修改 MediaWiki:Sidebar 页面来编辑侧边栏。使用类似命令 * navigation 和 option|label 定义新链接。
- 什么是“永恒”主题?它对定制有何影响?
- Timeless 主题是具有响应式设计的现代 MediaWiki 皮肤。侧边栏更改等自定义可能需要额外的测试以确保它们正确显示。
- 是否可以为新的侧边栏选项添加本地化?
- 是的,您可以使用 $skin->msg() 获取菜单项的本地化标签,确保与多语言 wiki 的兼容性。
- 我可以在不修改后端代码的情况下添加新功能吗?
- 是的,前端 JavaScript 解决方案例如使用 document.createElement() 允许您动态添加链接或功能,而无需更改后端。
- 如何测试新的侧边栏功能?
- 使用 PHP 单元测试或 PHPUnit 等测试框架,模拟侧边栏修改以确保它们按预期工作。
完善您的 MediaWiki 导航
在 MediaWiki 导航中添加“可打印版本”选项可为您的 wiki 带来更高的可用性和组织性。通过此处详细介绍的方法(从 PHP 脚本到 JavaScript),所有管理员都可以轻松且有效地进行自定义。
通过优先考虑本地化和主题兼容性,您的 wiki 成为不同受众的可靠资源。这些增强功能不仅改进了功能,还提供了用户友好的体验,体现了一个维护良好且易于访问的平台。 🌟
来源和参考文献
- 关于侧边栏自定义的官方 MediaWiki 文档: MediaWiki 侧边栏手册
- Timeless 主题配置的社区讨论和示例: MediaWiki 永恒主题
- 说明导航菜单布局的示例图像: 导航菜单示例
- 挂钩和扩展的 PHP 文档: PHP手册