4

我正在使用 MediaWiki。wiki 中的某些页面包含一个或多个大型导航块,例如本页底部的导航块:

https://www.eftepedia.nl/

像这样的块包含在许多页面中。现在,当一个页面被保存时,指向其他页面的链接列表也会更新(pagelinks表)。这些引用被“这里的链接”特殊页面和可能的其他类似页面使用。

但我实际上不希望这些块中的链接计算在内。有没有办法可以影响 MediaWiki 在此更新链接到其他页面的过程中排除页面的某些部分?

我编写了一些扩展,覆盖了特定的类并使用了一些钩子,所以我知道这些东西是如何工作的基础知识,但是我找不到合适的钩子来影响这部分过程。

就任何尝试而言,我发现ParserOutput::addLink用于将解析的链接存储到数组中。然后,在保存时,这个数组被合并到数据库中。addLink 从几个地方调用,最值得注意的是 from Parser::replaceInternalLinks2,它被调用 from Parser::internalParse

如果我理解正确,internalParse则分别为每段文本调用。这包括单独的包含,但也包括嵌套标签。也许我可以使用调用的钩子internalParse,但我还没有找到圣杯。我可以使用正确的方向来解决它,最好不修改 Parser 类本身。

4

1 回答 1

6

解决此问题的最简单方法是不使用[[wiki link]]链接的语法。您可以使用带有完整 URL 的外部链接语法,[http://like/this like this]并通过将它们包装在 div 或 span 中来使它们看起来像常规内部链接class="plainlinks"。为了减少这种痛苦,为此制作一个模板:

在 Template:NaviLink 中,您将拥有:

<span class="plainlinks">[{{fullurle:{{{1}}}}} {{{2|{{{1}}}}}}]</span>

(对于 mediawiki 疯狂的模板语法,是的)(有关 的解释fullurle,请参阅https://www.mediawiki.org/wiki/Fullurl#URL_data

在您的导航模板中,您将使用例如:

* {{NaviLink|Efteling Golf course}}
* {{NaviLink|Haunted Castle (Efteling)|Haunted Castle}}

除了 NaviLink 模板,您还可以实现一个解析器函数(不是钩子),它为所需链接输出 HTML,而无需将任何内容放入数据库。我不明白您为什么要这样做,但如果您愿意,请查看https://www.mediawiki.org/wiki/Manual:Parser_functions

PS:internalParse 不会为包含的文本单独调用。模板扩展由预处理器在实际解析器在生成的 wikitext 上运行之前完成。

于 2013-08-13T10:33:46.350 回答