MediaWiki:如何以编程方式更新 link 状态
MediaWiki: How to update a link status programmatically
我的扩展程序在页面上呈现额外的链接(即向页面文本添加一些 <a href='...'>...</a>
(在 HtmlPageLinkRendererEnd
挂钩中))。
有关示例,请参见 https://withoutvowels.org/wiki/Tanakh:Genesis_1:1 中的小箭头。箭头是由我的扩展程序自动添加的(抱歉,在撰写本文时源代码尚未发布)。
问题是我添加的链接的 red/blue ("new") 状态没有更新。
请解释如何让维基百科根据需要更新我的链接的颜色以及常规 [[...]]
MediaWiki 链接。
我目前的解决方法是 运行 php maintenance/update.php
。这是一个非常糟糕的解决方法。如何做得更好?
通常您会使用 LinkRenderer
来创建 link 和 LinkBatch
来使页面存在检查变得高效(您不需要单独的 SQL查询每个 link)。你不能在 HtmlPageLinkRendererEnd
中真正做到这一点,因为你只能一一了解 link。
解析器处理这个问题的方式是用占位符替换 links 并将它们收集在列表中,然后在解析大部分完成后立即查找它们,然后切换占位符使用呈现的 links。您可能可以挂钩两者之间发生的事情(例如 ParserAfterParse
),从解析器获取 link 的列表并使用它们构建您自己的 link 的列表。
在 Wikitech-l 邮件列表的宝贵帮助下,我找到了解决方案。
解决方案是使用 ParserAfterTidy 挂钩。
public static function onParserAfterTidy( &$parser, &$text ) {
# ...
$parserOutput = $parser->getOutput();
foreach($parserOutput->getLinks() as ...) {
# ...
$parserOutput->addLink( Title::newFromDBkey(...) );
}
}
我的扩展程序在页面上呈现额外的链接(即向页面文本添加一些 <a href='...'>...</a>
(在 HtmlPageLinkRendererEnd
挂钩中))。
有关示例,请参见 https://withoutvowels.org/wiki/Tanakh:Genesis_1:1 中的小箭头。箭头是由我的扩展程序自动添加的(抱歉,在撰写本文时源代码尚未发布)。
问题是我添加的链接的 red/blue ("new") 状态没有更新。
请解释如何让维基百科根据需要更新我的链接的颜色以及常规 [[...]]
MediaWiki 链接。
我目前的解决方法是 运行 php maintenance/update.php
。这是一个非常糟糕的解决方法。如何做得更好?
通常您会使用 LinkRenderer
来创建 link 和 LinkBatch
来使页面存在检查变得高效(您不需要单独的 SQL查询每个 link)。你不能在 HtmlPageLinkRendererEnd
中真正做到这一点,因为你只能一一了解 link。
解析器处理这个问题的方式是用占位符替换 links 并将它们收集在列表中,然后在解析大部分完成后立即查找它们,然后切换占位符使用呈现的 links。您可能可以挂钩两者之间发生的事情(例如 ParserAfterParse
),从解析器获取 link 的列表并使用它们构建您自己的 link 的列表。
在 Wikitech-l 邮件列表的宝贵帮助下,我找到了解决方案。
解决方案是使用 ParserAfterTidy 挂钩。
public static function onParserAfterTidy( &$parser, &$text ) {
# ...
$parserOutput = $parser->getOutput();
foreach($parserOutput->getLinks() as ...) {
# ...
$parserOutput->addLink( Title::newFromDBkey(...) );
}
}