【问题标题】:Mediawiki page for users to leave anonymous comments?Mediawiki 页面供用户留下匿名评论?
【发布时间】:2013-07-22 15:17:18
【问题描述】:

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

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

有什么想法吗? (没有双关语!)

【问题讨论】:

  • 我假设您的意思是用户名/IP 地址不应该出现在该页面的编辑历史记录中?那个(以及最近的变化)只是 MediaWiki 自动记录它们的地方。

标签: mediawiki


【解决方案1】:

应该可以编写一个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' 就可以了。

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


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

【讨论】:

  • 没错。我不希望任何用户能够知道谁只在这个页面上写了什么。我已将您提到的代码添加到 localsettings.php 并将 pagecontentsave 更改为“ArticleSave”,除了我无法找到“Project:Sandbox”页面来测试它之外,wiki 运行良好!我现在需要进入并创建\编辑此页面吗?你会建议我替换哪些变量,让它说 FREESPEECH 与 Project:Sandbox 相对,让它显示在左侧的导航窗格中有多容易?任何信息都会成为传奇!
  • 是的,您需要创建页面。如果您希望页面名称为“FREESPEECH”,则将if 条件替换为if ( $title->getNamespace() == NS_MAIN && $title->getText() == 'FREESPEECH' )。 (You can find a list of the NS_ constants here.) 至于添加到侧边栏,你需要在你的wiki上编辑MediaWiki:Sidebar; see instructions here.
  • 添加了以下代码:function anonymizeSandboxEdits( &$wikiPage, &$user, &$content, &$summary, $isMinor, $isWatch, $section ) { $title = $wikiPage->getTitle(); if ( $title->getNamespace() == NS_PROJECT && $title->getText() == 'FREESPEECH' ) { $user = User::newFromName( 'Anonymous' ); } return true; // keep running other hooks } $wgHooks['ArticleSave'][] = 'anonymizeSandboxEdits'; $wgReservedUsernames[] = 'Anonymous'; 但版本历史仍然显示我的名字:(
  • 您是在“Project:FREESPEECH”还是“FREESPEECH”上尝试过?您的代码中仍有NS_PROJECT
  • 像魅力一样工作!!!有没有一种简单的方法可以让该页面以某种方式简单地写博客(仅限 cmets?)这样每次有人发布它就变成一个单独的帖子?就像在 youtube 上留下 cmets 等...
猜你喜欢
  • 2013-02-24
  • 2022-01-21
  • 2016-08-08
  • 1970-01-01
  • 2021-04-20
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
相关资源
最近更新 更多