【问题标题】:Add a tracking category to a page in a MediaWiki extension **not** using a parser function**不**使用解析器函数将跟踪类别添加到 MediaWiki 扩展中的页面
【发布时间】:2015-04-18 07:26:16
【问题描述】:

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

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

我尝试过使用很多钩子: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 的附加钩子,例如在 Extension:CommonsMetadata 中使用,这似乎完全允许 ​​- 但我仍然仅限于 MediaWiki 1.24...任何想法?

【问题讨论】:

    标签: php mediawiki mediawiki-extensions


    【解决方案1】:

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

    所以 ParserAfterTidy 应该可以工作,尽管在页面内容之外的各种事物上调用它会遇到麻烦。尝试在页面上进行空编辑,看看类别是否已更新。

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

    【讨论】:

    • 最后,我决定修补我的 MediaWiki 版本(直到 1.25 发布)比使用不稳定的解决方法更容易也更有意义 - 特别是因为这是一个非常包含的补丁。修补 MW 核心不是我推荐用于公共扩展的东西,但我很适合我们的企业使用。
    • @DrorS。不,这不好。它会让你的升级更加痛苦,这会降低你升级的机会,这会让你的公司更不安全。
    • @Nemo,虽然我通常不容忍修补核心,但进行临时更改更有意义,升级时很容易恢复,然后在我的代码中使用不令人满意的解决方法。无论如何,我只是在这里提到它的完整性。请记住,这是一个开发者的网站——所以如果我认为我可以处理一个包含的小补丁,那么我可能可以...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2022-08-15
    相关资源
    最近更新 更多