在《MediaWiki外观设置》一文中,我们简单介绍了一下侧边栏的修改,但也仅限于添加和删除某些菜单项。如果你再深入一点就会发现,这些菜单项中有很多内容是无法随便删除的,比如工具栏。
我知道,MediaWiki提倡的是开放,但还是有人会希望尽可能少的呈现某些内容,而这些偏偏都在工具栏里;另外,大部分的菜单项也确实对于用户没什么太大用处,出现反而会影响使用体验。
最简单的方法之一就是通过CSS的方法,把侧边栏中的某些内容给隐藏掉。不过也有可能某些朋友跟我一样,对于匿名用户只提供特定的主题给他们,然后在该主题下屏蔽了某些菜单,那么CSS的方法基本上还是可行的(注意:本方法也就只能骗骗MediaWiki的小白用户,只要网站提供多个主题还是可以切换过来的)。另外,某一天我需要在侧边栏中新添加一个菜单项,那么我就得再次编辑CSS文件,找到需要隐藏<div>
的ID,然后{ display: none; }
。
那有没有更好一些的方法,只给匿名用户提供定制的侧边栏菜单——给他们看到我们希望给到的选项呢?
方法如下:
一、打开LocalSettings.php文件,加入以下代码
<?php
# disable sidebar and toolbox for anonymous user
# advice from mediawiki
$wgEnableSidebarCache = false;
$wgHooks['SkinBuildSidebar'][] = 'lfHideSidebar';
/**
* Show a different sidebar for anonymous users.
* based on https://www.mediawiki.org/wiki/Manual:Interface/Sidebar/Hacks
*
* $skin Skin object
* $bar array Contains the array items, out of which the sidebar will be
created.
* @return true
*/
function lfHideSidebar( $skin, &$bar ) {
global $wgUser;
// Hide sidebar for anonymous users
if ( !$wgUser->isLoggedIn() ) {
// Shows a special anonymous sidebar.
$bar = array(
// Returns the message text of that sidebar with only transformation done.
// Setting array keys "text"; array keys "href" and "active" stay unset.
'text' => wfMessage( 'anon_sidebar' )->inContentLanguage()->parse(),
//'text' => wfMessage( 'anon_sidebar' )->inContentLanguage()->text(),
);
} else {
// No changes, just display the sidebar as usual.
}
return true;
}
注意:代码中的text内容可以根据自己的需要修改,比如'导航' => wfMessage( 'anon_sidebar' )->inContentLanguage()->parse(),
,在它下面有一行很相像的代码,唯一的区别是,前者可以转化为维基文本,而后者直接就是显示文本。
二、打开浏览器,输入http://你的维基站/mediawiki:Anon_sidebar,然后加入希望别人看到的内容。比如:
* [[首页]]
* [[特殊:随机|随机页面]]
注意:mediawiki:sidebar中的方法不能直接套用到上面的页面中,比如mainpage|mainpage-description
并不会显示为首页,并且二级菜单貌似也会失效。另外,本方法对于特定主题可能会有不同的效果(Vector主题的TOOLBOX顽强到只能通过CSS的方法或者另加代码来隐藏),尤其是结合CSS的时候,所以还请多进行几次测试以确保显示效果。
参考文献:
Show a different sidebar for anonymous users
Manual:Interface/Sidebar/Hacks