MediaWiki的页面中包含了各种链接、按钮和交互元素,并每个页面上的内容又根据不同用户有着不同的增减和限制。但是,某些功能可能并非与所有用户相关。例如,在只有注册用户才能编辑的公共维基中,可能没有必要向匿名访问者显示“查看源代码”的链接。同样,匿名用户可能对访问文章的历史记录不感兴趣。
虽然我们无法轻松删除这些元素,但我们可以简单地使用CSS将它们从页面中隐藏起来。 MediaWiki提供了一种定义CSS的方法——即在特定页面中加入CSS代:如适用于全站且每个用户都会加载的MediaWiki:Common.css
页面,或者仅当特定用户组内的用户加载时的(例如,MediaWiki:Group-user.css
)页面。不幸的是,MediaWiki却没有办法添加仅为匿名用户加载的CSS设置页面。
那么该如何做呢?解决方法是:
- 为所有浏览者(包括匿名和登录用户)隐藏相关元素。
- 为登录用户添加其他样式以显示被隐藏的元素,即覆盖步骤1中添加的全局样式。
要使用这样的维基样式,你需要:
- 可以编辑站点样式页面的wiki帐户(需要拥有
editsitecss
权限)。 - 要在wiki站点中使用CSS的话需要设置
$wgUseSiteCss = true;
(默认开启),但如果禁用它,则以下方法将不起作用。
隐藏MediaWiki元素
第一步是确定要隐藏的元素的CSS选择器。在本例中,我们想要隐藏ID为p-views
的导航栏。页面上元素的ID和其他选择器信息可以通过“查看”页面源代码找到。
现在我们知道CSS的目标是什么(#p-views ,表示ID为p-views的元素),编辑页面MediaWiki:Group-user.css
并添加以下内容。我们首先创建样式来取消隐藏元素,这样它就不会因登录用户而消失:
#p-views {
display: block !important;
}
使用!important
是为了让用户的样式覆盖所有人的样式,否则,如果稍后应用所有人的样式,导航栏将对所有人隐藏!
接下来,将以下内容添加到MediaWiki:Common.css
中:
#p-views {
display: none;
}
确认
本质上就是这样。如果你在注销后重新加载页面,导航栏应该消失了。你可以检查页面源代码,发现该元素仍然存在,只是对匿名用户隐藏了——具体应用的CSS可以在右下角看到。
另一方面,登录帐户后,导航栏就会恢复:
如果你查看上图的右下角,会发现该栏应用了两组样式。底部的一个为每个人隐藏了该元素,已被划掉。最上面的元素显示了登录用户的元素,它更加明确,因此优先。
针对皮肤的方法
请注意,这只是一种可能的方法。对于仅存在于特定外观中的元素,你可能不希望将隐藏元素的样式添加到MediaWiki:Common.css
中。因为它是针对所有页面皮肤加载的,而不仅仅是具有你想要的特定皮肤。如此一来,可能对其他皮肤产生轻微的性能影响之外,还可能使你的MediaWiki:Common.css
页面变得又大又笨重。所以,另一种方法就是将隐藏样式添加到特定于皮肤的样式页面——MediaWiki:{skin}.css
,其中{skin}替换为皮肤名称(第一个字母大写)。因此,要仅隐藏Vector皮肤中的元素(因为它们仅存在于该皮肤中,或者因为你只想使用该皮肤在页面视图上隐藏它们),那么请在MediaWiki:Vector.css
中添加:
#p-views {
display: none;
}
但请注意,恢复元素可见性的样式仍然需要进入MediaWiki:Group-user.css
,而不同组的样式页面是没有针对于特定皮肤的。
在配置文件中修改
严格说起来,MediaWiki还是提供了另外一种针对匿名用户的设置方法,只是它更加复杂,通常更适合个人站点。具体做法就是在配置文件中添加一段代码,而其目的仍然是使用CSS隐藏元素。具体可见本站的文章《MediaWiki匿名用户隐藏某些链接(按钮)》
该方法的缺点除了对权限要求高之外,系统更新后函数可能被弃用(比如User::isLoggedIn
改成User::isAnon
)。最重要的还有一点就是时间一长,你可能自己都记不清是在页面中修改了还是在配置文件中修改了。
其他文章
参考资料
本文主要翻译自How to Hide Elements for Anonymous Users in MediaWiki一文,并做了适当的修改。