1

看起来真的很简单......但如果我能找到一个可以做到这一点的扩展,我会被诅咒的!

我正在使用 Mediawiki 1.18,我真的希望它是一个从主页链接的页面,它充当我 wiki 上的任何人的空白页面,以便能够匿名发布他们的想法,而不会在他们的帖子上显示他们的名字!我只想在我的 wiki 的一页上使用此功能。所以总而言之,我只想能够设置一个启用匿名发布的页面。

有任何想法吗?(没有双关语!)

4

1 回答 1

0

应该可以编写一个PageContentSave$user挂钩,通过更改通过引用传入的参数,将所有对特定页面的编辑归因于不存在的用户,如下所示:

function anonymizeSandboxEdits( &$wikiPage, &$user, &$content, &$summary,
                                $isMinor, $isWatch, $section ) {
    $title = $wikiPage->getTitle();
    if ( $title->getNamespace() == NS_PROJECT && $title->getText() == 'Sandbox' ) {
        $user = User::newFromName( 'Anonymous' );
    }
    return true;  // keep running other hooks
}

$wgHooks['PageContentSave'][] = 'anonymizeSandboxEdits';
$wgReservedUsernames[] = 'Anonymous';

将此代码添加到 LocalSettings.php 应该会导致对页面“Project:Sandbox”(其中“Project:”是您的项目命名空间名称)的所有编辑都归因于不存在的用户“Anonymous”。

请注意,PageContentSave 钩子是最近在 MediaWiki 1.21 中引入的。较旧的 MediaWiki 版本有一个名为ArticleSave的钩子,它具有基本相同的参数并执行基本相同的操作。如果您仍在运行旧版本的 MediaWiki,只需将'PageContentSave上面的 '替换为就'ArticleSave'可以了。

ArticleSave 挂钩已在 MW 1.21 中弃用,但仍保留以实现向后兼容性,因此即使您升级它也应该继续工作。但是,我应该注意,在未来的 MediaWiki 版本中,不能保证其他东西不会破坏这个技巧:虽然替换该$user钩子中的对象似乎可以很好地重新归因编辑,但该特定用例并未真正记录为明确支持. 未来对 MediaWiki 代码的更改可能会或多或少地巧妙地破坏它。


附言。我在我自己的 wiki 上试过这个(仍然运行 MW 1.20,所以使用 ArticleSave 版本),它似乎工作正常。一个有点奇怪的副作用是,如果您尝试使用 签名页面~~~~,它将在预览中显示您的真实用户名,但在您实际保存页面时将其替换为“匿名”。可能可以解决这个问题,但它需要(也)使用其他一些实际在预览时运行的钩子。

于 2013-07-22T16:34:53.173 回答