Gol*_*rol 4 mediawiki mediawiki-extensions
我正在使用MediaWiki.wiki中的某些页面包含一个或多个大型导航块,如本页底部的那些:
像这样的块包含在许多页面中.现在,当保存页面时,也会更新指向其他页面的链接列表(pagelinks表格).这些引用由"这里有什么链接"特殊页面以及可能的其他类似页面使用.
但实际上我不希望这些块中的链接计算在内.有没有办法可以影响MediaWiki在这个更新链接到其他页面的过程中排除页面的某些部分?
我已经编写了一些扩展,覆盖了特定的类并使用了一些钩子,所以我知道这些东西是如何工作的基础知识,但我找不到合适的钩子来影响这部分过程.
至于任何尝试,我发现ParserOutput::addLink,它用于将解析的链接存储到数组中.然后,在保存时,此数组将合并到数据库中.addLink是从几个地方调用的,最值得注意的是来自Parser::replaceInternalLinks2调用的地方Parser::internalParse.
如果我理解正确,internalParse则分别为每段文字调用.这包括单独的包含,但也包括嵌套标签.也许我可以使用所谓的钩子internalParse,但我还没有找到圣杯.我可以使用正确的方向来解决它,最好不要修改Parser类本身.
解决这个问题的最简单方法是不使用[[wiki link]]链接的语法.您可以将外部链接语法与完整URL一起使用,[http://like/this like this]并通过将它们包装在div或span中来使它们看起来像常规内部链接class="plainlinks".为了减轻痛苦,请为此制作一个模板:
在Template:NaviLink中,您将拥有:
<span class="plainlinks">[{{fullurle:{{{1}}}}} {{{2|{{{1}}}}}}]</span>
Run Code Online (Sandbox Code Playgroud)
(对于mediawiki的疯狂模板语法而言)(对于exmplanation fullurle,请参阅https://www.mediawiki.org/wiki/Fullurl#URL_data)
在导航模板中,您将使用例如:
* {{NaviLink|Efteling Golf course}}
* {{NaviLink|Haunted Castle (Efteling)|Haunted Castle}}
Run Code Online (Sandbox Code Playgroud)
您也可以实现一个解析器函数(而不是一个钩子)来代替NaviLink模板,该函数输出所需链接的HTML,而不会将任何内容放入数据库.我不明白你为什么要这样做,但如果你愿意,请看看https://www.mediawiki.org/wiki/Manual:Parser_functions.
PS:对于包含的文本位,不单独调用internalParse.在生成的wikitext上运行实际解析器之前,模板扩展由预处理器完成.