MediaWiki:如何以编程方式更新链接状态
我的扩展在页面上呈现附加链接(即在页面文本中添加一些MediaWiki:如何以编程方式更新链接状态,mediawiki,mediawiki-api,mediawiki-extensions,Mediawiki,Mediawiki Api,Mediawiki Extensions,我的扩展在页面上呈现附加链接(即在页面文本中添加一些(在htmlpagelinkrenderendhook中)) 有关示例,请参见中的小箭头。箭头由我的扩展自动添加(抱歉,在撰写本文时,源代码尚未发布) 问题是我添加的链接的红/蓝(“新”)状态没有更新 请解释如何使维基百科与常规的[…]MediaWiki链接一起更新我的链接的颜色 我目前的解决方法是运行php维护/update.php。这是一个非常糟糕的解决办法。如何做得更好?通常,您会使用LinkRenderer来创建链接,并使用LinkBa
(在htmlpagelinkrenderend
hook中))
有关示例,请参见中的小箭头。箭头由我的扩展自动添加(抱歉,在撰写本文时,源代码尚未发布)
问题是我添加的链接的红/蓝(“新”)状态没有更新
请解释如何使维基百科与常规的[…]
MediaWiki链接一起更新我的链接的颜色
我目前的解决方法是运行
php维护/update.php
。这是一个非常糟糕的解决办法。如何做得更好?通常,您会使用LinkRenderer
来创建链接,并使用LinkBatch
来提高页面存在性检查的效率(您不希望每个链接都有单独的SQL查询)。在htmlagelinkrenderrend
中,您不能真正做到这一点,因为您只能逐个了解链接
解析器处理这个问题的方式是,它用占位符替换链接并将它们收集到一个列表中,然后在解析基本完成后,它会立即查找所有链接,然后用呈现的链接切换占位符。你可能会陷入两者之间发生的某些事情(例如,
parservaterparse
),从解析器中获取链接列表,并使用它们构建自己的链接列表。在Wikitech-l邮件列表的宝贵帮助下,我找到了一个解决方案
解决方案是使用ParserAvertidy钩子
public static function onParserAfterTidy( &$parser, &$text ) {
# ...
$parserOutput = $parser->getOutput();
foreach($parserOutput->getLinks() as ...) {
# ...
$parserOutput->addLink( Title::newFromDBkey(...) );
}
}
嗯,有这样的
parser/LinkHolderArray.php
但是你的解决方案解决了我的主要问题吗:如何让MediaWiki引擎知道我添加的链接,这样它就可以根据需要重新呈现我的页面,在红/蓝链接之间切换?为什么引擎必须知道你的链接?如果您担心它们不会出现在特别版:WhatLinksHere
等中,您可以在一个与LinksUpdate
相关的钩子中解决。似乎LinksUpdate
的作用与我的需要相反:它更新保存文档中的链接,而我需要更新到保存文档的链接。怎样?!否,LinksUpdate
更新指向已保存文档的链接(例如,创建链接文章时,红色链接可能变为蓝色)。