mediawiki-使链接计算不区分大小写

mediawiki-使链接计算不区分大小写,mediawiki,case-insensitive,Mediawiki,Case Insensitive,我正在运行一个小的wiki,我们的用户想要一个他们觉得不那么混乱的界面。投诉是,如果链接是“大新闻”或“大新闻”或其他大写/小写排列,则标题为“大新闻”的页面显示为红色链接,如果页面存在,他们希望这些链接显示为正常颜色的链接。当用户单击链接时,适当的页面会正确显示,但最好先看到该页面已经存在 我已经尝试过实现一些解决方案,比如上面介绍的解决方案,但是它们不起作用——链接仍然会在页面上显示为红色链接。[事实上,我认为有些文章已经过时;mediawiki 1.27似乎没有其中提到的表格。] 你知道我

我正在运行一个小的wiki,我们的用户想要一个他们觉得不那么混乱的界面。投诉是,如果链接是“大新闻”或“大新闻”或其他大写/小写排列,则标题为“大新闻”的页面显示为红色链接,如果页面存在,他们希望这些链接显示为正常颜色的链接。当用户单击链接时,适当的页面会正确显示,但最好先看到该页面已经存在

我已经尝试过实现一些解决方案,比如上面介绍的解决方案,但是它们不起作用——链接仍然会在页面上显示为红色链接。[事实上,我认为有些文章已经过时;mediawiki 1.27似乎没有其中提到的表格。]


你知道我该怎么做吗?

你可以连接并使用链接目标来运行数据库查询,以查找页面标题中页面名称的任何不区分大小写的匹配项,它只需对内部链接执行此操作,然后在有匹配项的情况下替换目标。

谢谢你的提示,@Sam Wilson。这看起来是一个有趣的函数,但除非我猜错了,否则我必须查询数据库中页面中的每个链接-对吗?如果是这样的话,我认为性能会受到影响。无论如何,这个钩子似乎对我不起作用[主要是因为我对mediawiki的不熟悉让我挠头…]。我提出的解决方案如下:

1-将变量$wgLinksIgnoreCase添加到LocalSettings.php文件中。如果希望链接显示以不区分大小写的方式映射,请将此设置为true

2-修改文件includes/parser/LinkHolderArray.php如下[diff accurate for wikimedia version 1.29]-

283a284
>               global $wgLinksIgnoreCase;
370a373,376
>               if (!empty($wgLinksIgnoreCase)) {
>                   $mapper = array_combine(array_keys($colours), array_keys($colours));
>                   $mapper = array_change_key_case($mapper);
>               }
373a380,381
>               if (!empty($wgLinksIgnoreCase) && isset($mapper[strtolower($pdbk)]))
>                   $pdbk = $mapper[strtolower($pdbk)];

正如我所说,我对这个软件不是很熟悉,所以如果熟悉它的人找到了一个更优雅的解决方案,请随意插话。

你可以看看它是如何使用的。很可能,所有小写标题都需要特殊的大小写,在相同的位置,代码需要根据该设置进行分支。

LinkCache用于避免重复的数据库查找;LinkBatch用于批处理数据库查找。但是,我希望除了API之外,几乎所有的东西都依赖于标题中的标题规范化,所以也许你只需要修改一下就可以了。