禁用匿名用户的类别树侧边栏


Disable CategoryTree Sidebar for anonymous users

我正在使用MediaWiki的CategoryTree扩展。我想隐藏侧边栏,以防访问者是匿名的。

wgUseAjax = true;
require_once( "$IP/extensions/CategoryTree/CategoryTree.php" );
$wgCategoryTreeSidebarRoot = "SomeCategory";
$wgCategoryTreeSidebarOptions = array();
$wgCategoryTreeSidebarOptions['mode'] = CT_MODE_ALL;

(扩展名:http://www.mediawiki.org/wiki/Extension:CategoryTree))

我找到了一个名为HideSidebar的扩展。

代码如下所示

function efHideSidebar($skin, &$bar) {
        global $wgUser;
        // Hide sidebar for anonymous users
        if (!$wgUser->isLoggedIn()) {
                $url = Title::makeTitle(NS_SPECIAL, 'UserLogin')->getLocalUrl();
                $bar = array(
                        'navigation' => array(
                                array('text'   => 'Login',
                                      'href'   => $url,
                                      'id'     => 'n-login',
                                      'active' => '')
                        )
                );
        }
        return true;
}

但是此代码仅隐藏导航和工具箱,而不隐藏类别树侧边栏。

当访问者匿名时,有没有一种简单的方法可以使用另一个钩子以某种方式停用类别树扩展?

此代码适用于侧边栏,不适用于类别小部件。实际上,该函数注入了一个钩子:$wgHooks['SkinBuildSidebar'][] = 'efHideSidebar';您将在此处找到完整的代码。https://www.mediawiki.org/wiki/Extension:HideSidebar

如何为CategoryTreeSidebar制作类似的东西?

这迟到了 9 年,但令人惊讶的是,没有任何变化,问题仍然存在。

博士转到/extensions/HideSidebar/extension.json

并将第 16 行的 SkinBuildSideBar 替换为 SidebarBeforeOutput

TS;威马

我遇到了同样的错误,稍微看了一会儿,我已经能够发现,如果您修改将 HideSidebar 挂钩到哪个 Hook,您实际上可以修改整体输入。

问题在于构建了侧边栏,然后在顶部添加了类别树。如果你像原来的HideSidebar那样挂接到构建函数的末尾(SkinBuildSidebar),类别树还不存在,因此仍然会被添加。

如果您修改要挂钩的扩展SidebarBeforeOutput那么它可以完美运行,包括类别树。