MediaWiki:如何以编程方式更新链接状态

时间:2016-12-31 18:00:18

标签: mediawiki mediawiki-api mediawiki-extensions

我的扩展程序在页面上呈现其他链接(向页面文本添加一些<a href='...'>...</a>(在HtmlPageLinkRendererEnd挂钩中))。

请参阅https://withoutvowels.org/wiki/Tanakh:Genesis_1:1中的小箭头作为示例。我的扩展程序会自动添加箭头(抱歉,在撰写本文时,源代码尚未发布)。

问题是我添加的链接没有更新红/蓝(“新”)状态。

请解释如何使Wikipedia与常规[[...]] MediaWiki链接一起更新我的链接颜色。

我目前的解决方法是运行php maintenance/update.php。这是一个非常糟糕的解决方法。怎么做得更好?

2 个答案:

答案 0 :(得分:2)

通常,您使用LinkRenderer创建链接,LinkBatch使页面存在检查有效(您不希望为每个链接单独的SQL查询)。你不能在HtmlPageLinkRendererEnd中真正做到这一点,因为你只是逐一了解这些链接。

解析器处理这个问题的方法是它用占位符替换链接并将它们收集在列表中,然后在解析完成后,它会立即查看它们,然后用渲染的链接切换占位符。您可以勾选两者之间发生的事情(例如ParserAfterParse),从解析器获取链接列表并使用它们构建您自己链接的列表。

答案 1 :(得分:0)

在Wikitech-l邮件列表的宝贵帮助下,我找到了一个解决方案。

解决方案是使用ParserAfterTidy钩子。

public static function onParserAfterTidy( &$parser, &$text ) {
            # ...

            $parserOutput = $parser->getOutput();

            foreach($parserOutput->getLinks() as ...) {
                    # ...

                    $parserOutput->addLink( Title::newFromDBkey(...) );
            }
}