将跟踪类别添加到 MediaWiki 扩展中的页面**不**使用解析器函数

Add a tracking category to a page in a MediaWiki extension **not** using a parser function

我想将跟踪类别添加到我的维基上的特定页面,运行 MW 1.24。我知道我可以使用 Parser::addTrackingCategory() 或 ParserOptions::addCategory() 来做到这一点,但我能找到的唯一使用它们的例子是在解析器函数中(如 extension:Maps 中所示,例如),我使用。

我使用的扩展是 ApprovedRevs 派生的;基本上它所做的是为项目分配一个页面,并允许简单的批准。这都是在实际页面内容(附加数据库表)之外完成的,因此没有解析器函数/标记。

我尝试使用了很多钩子:ParserAfterTidy、ContentGetParserOutput、OutputPageParserOutput 和其他几个。虽然第一个至少在页面上显示了类别,但该页面实际上并未包含在跟踪类别中(显示为空)。

我的代码(缩写)是这样的:

$wgTrackingCategories[] = 'approvedrevs-tracking-category';
$wgHooks['ParserAfterTidy'][] = 'onParserAfterTidy';

public static function onParserAfterTidy( Parser&$parser, &$text ) {
  $title = $parser->getTitle();
  if( ApprovedRevs:isPageAssigned( $title ) {
    $parser->addTrackingCategory( 'approvedrevs-tracking-category' );
  }
}

我为此跟踪类别添加了适当的消息;此时,我可以在页面上看到类别,并且可以看到 Special:TrackingCategories.

中列出的跟踪类别

我现在确实发现从 MW 1.25 开始,有一个名为 ContentAlterParserOutput, used for example in Extension:CommonsMetadata 的附加挂钩,它似乎允许这样做 - 但我仍然限于 MediaWiki 1.24...有什么想法吗?

The commit 添加 ContentAlterParserOutput 解释了它与其他挂钩的不同之处,并概述了一些解决方法。 (添加挂钩或设置的提交通常链接自手册页,通常值得点击。)

所以 ParserAfterTidy 应该可以工作,尽管您会 运行 遇到麻烦,因为它被调用到各种不属于页面内容的东西上。尝试在页面上进行空编辑,看看类别是否已更新。

从类似挂钩 (ParserBeforeTidy) 添加跟踪类别的扩展示例是 Cite