This page is a translated version of the page Manual:Interface/Sidebar and the translation is 94% complete.
側边栏示例
参见:​Manual:Remove Tabs


MediaWiki:Sidebar 讓用户可以修改导航栏。 导航栏能提供指向 wiki 中最重要位置的链接,并为网站管理员提供能添加一众重要链接的地方。 例如,大多数 wiki 会链接到社区讨论页和一些实用工具页。

Monobook 和 Vector 皮肤将导航栏与搜索栏、工具箱一起放在左上角(从右至左書寫的语言为右上角),但是其他皮肤上可能有不同的放法。 此侧边栏不向移动端站点的用户显示(即由 Extension:移动前端 / Skin:MinervaNeue 生成的站点版本 ——使用 MobileMenu 钩子实现)。

自定义侧边栏

要在 wiki 上自定义 MediaWiki:Sidebar,您首先需要使用具有“editinterface”权限的用户登录。 对于管理员,这是默认启用的。[1]

你可以通过以下方式访问MediaWiki:Sidebar:

  • 在你的浏览器访问http://您的域名/wiki/index.php?title=MediaWiki:Sidebar&action=edit。
  • 在搜索栏输入 MediaWiki:Sidebar,然后按回车确认。
  • 在“Special:AllMessages”页面中搜索“side”。

以下是在 MediaWiki:Sidebar 中为侧边栏添加的示例代码:

* navigation
** mainpage|Accueil
** Special:RecentChanges|Recent changes
* new heading
** portal-url|Forums
** https://www.mediawiki.org|MediaWiki home

本示例将产生以下侧边栏:

 
边栏示例
如果你需要创建一个新页面,编辑时将在编辑器中显示侧边栏的默认内容。为了成功创建MediaWiki:Sidebar页面,您需要在保存之前更改内容。

将导航栏拆分为新的部分

导航栏可以分成几个部分,每个部分都有自己的新标题。 这是通过添加一个星号来完成的。

每个部分的标题取自第一级列表元素(上例中的“导航”和“新标题”)。 如果此文本与接口消息的名称(MediaWiki名称空间中该标题的现有页面)相对应,则该页面的文本用作标签; 否则,标题标题按原样使用。 请注意,魔术字 {{int:}} 不起作用,因为它没有用:MediaWiki 会在回退到缺省消息之前自动找到一条翻译来显示。

在上面的例子中,* navigation* new heading 是章节标题。

在侧边栏创建链接

用 2 个星号创建链接(这个叫二级列表元素)。 例如:

** 目标页面|链接文本
目标页面
链接目标可以是界面消息(MediaWiki 命名空间中的页面)或维基页面的名称,也可以是外部链接。 在任一情况下,链接可以是内部的、跨维基的或外部的。[2]
按以下步骤操作以确定目标:
  1. 获取目标文本。
  2. 如果存在具有该名称的现有或默认界面消息,请使用该消息的内容而不是目标文本。
  3. 如果上一步的输出是有效的 URL(以 http:// 或其他 URL 协议 开头),则链接将指向该 URL。
  4. 否则,它会将其视为 wikilink 的链接目标(链接到该页面名称或 interwiki)。
  5. 如果它最终会链接到“-”,则整个条目将从侧边栏中删除。 (这对于通过更改包含链接的消息来删除所有语言的条目很有用)。
示例:
  • "** portal-url|portal" - 使用 MediaWiki:Portal-url 的文本(其中包含“Project:Community portal”)。
  • "** https://www.mediawiki.org|MediaWiki home" - 链接到 https://www.mediawiki.org 因为这是个有效的 URL。
  • "** Special:RecentChanges|Recent changes" - 链接到 Special:最近更改,因为没有该名称的界面消息。
  • "** w:Foo|Some interwiki page" - 出于同样的原因,链接到w:Foo
链接文本
链接文本可以是界面消息的名称(MediaWiki 命名空间中的页面)或纯文本。
  • 如果链接文本是现有或默认界面消息的名称,则将使用该消息的内容。 MediaWiki 将检查本地化版本; 例如,如果当前语言是fr(法语),并且链接文本是界面消息“forum”,则在使用“forum”之前会检查“forum/fr”。
  • 否则,链接文本按原样用作目标。
  • 请注意,链接文本不是可选的,就像在普通的 wiki 链接中一样。 如果链接文本丢失,该项目将被忽略
示例:
  • ** Homepage|mainpage - 使用MediaWiki:Mainpage(内容为"MediaWiki")。
  • ** Special:Recentchanges|Recent changes - 使用“最近更改”,因为没有该名称的接口消息。
Target link w:Foo is the english version interwiki article. For another language version must be used language code before the target article name. For example to polish version w:pl:Foo or shortly pl:Foo. But for the multilanguage wiki target as this, is better use Special:MyLanguage. You can try for example link to Help:Links article.
Special:MyLanguage/Help:Links#Interlanguage_links | helplinks
String helplinks is translatable message from MediaWiki namespace, similary as portal above, but target URL is result of the special page. Not generated from content of the translatable message as MediaWiki:portal-url. If the translated content of target page exists, is directly opened. If not, is opened default language version of it.


章节顺序(元素)

某些皮肤允许自定义某些特殊元素的顺序,比如搜索框、工具箱以及语言列表。 以标题语法的形式向 MediaWiki:Sidebar 添加 SEARCH、TOOLBOX 和 LANGUAGE 关键词,即可排放对应的元素。

但是,MonoBook 等一些皮肤不再支持定义搜索元素的位置,而是将搜索元素放置在侧边栏的第一部分之后。 在这种情况下,要将搜索元素移动到顶部,解决方法是定义一个空的前导部分。 例如:

* empty section
* navigation
** mainpage|mainpage
** Special:Recentchanges|Recent changed
* new heading
** portal-url|portal
** https://www.mediawiki.org|MediaWiki home

请注意,某些皮肤可能会以不同方式显示第一部分,或者在第一部分和第二部分(如果有)之间放置一些元素。

工具提示和快捷键

工具提示 (tooltip) 是当光标位于图形用户界面中的图标、图像、超链接或其他元素上时出现的消息。

如果您将一个项目添加到侧边栏,它将没有“工具提示”。但是您可以通过执行以下操作来创建工具提示: [3]

  • 创建一个名为“MediaWiki:Tooltip-n-<项目 ID>”的维基页面
  • 并将工具提示放在该页面中。

快捷键 (access key/accesskey) 允许计算机用户通过键盘立即跳转到网页的特定部分。

也可以通过执行以下操作来创建快捷键:

  • 创建一个名为“MediaWiki:Accesskey-n-<项目 ID>”的维基页面
  • 并将快捷键放在该页面中。

例如:


翻译

您可以通过编辑 MediaWiki 命名空间中的相应页面来翻译您使用的字符串。

示例: - 替换“mainpage”项目的字符串取自MediaWiki:Mainpage。要为用中文显示您的维基的用户设置/更改此文本,您可以将相应的文本放在页面MediaWiki:Mainpage/de上。

这样您就可以通过 MediaWiki 界面轻松翻译这些文本。

请注意,MediaWiki 将默认使用您 wiki 的默认语言显示侧边栏页面内容。所以,如果你的维基使用中文作为其默认语言,编辑MediaWiki:Mainpage/fr以便向所有未更改语言设置的用户和所有匿名用户显示修改后的侧边栏。

有关更多翻译的信息,参见 帮助:扩展:翻译/未结构化元素翻译

高级自定义

侧边栏可通过JavaScriptCSS,以及直接编辑PHP文件来完全自定义。但在使用这些方法前,请注意:

  • JavaScript很脆弱:使用JavaScript的方式完全不适用于禁用了JavaScript的用户,而且同一个JavaScript应对不同的浏览器和皮肤时也很可能出错。
  • 直接编辑PHP文件很容易导致预期外的错误,且手动的对文件作出的修改将会在下一次版本升级时丢失,除非你也手动对新版本的相应文件作出修改。

要彻底移除侧边栏和Logo:

清空MediaWiki:Sidebar页面后,保存。

然后添加:

#column-content { margin: 0 0 1em 0; }
#content { margin: 0 0 0 0; }
#p-cactions { left: .1em; }

这会将您wiki的内容文本区域向左移动。

彻底移除侧边栏、标签选项、搜索栏

参见:​Manual:Remove Tabs


删除Logo和整个侧边栏:

#p-logo, .generated-sidebar, #p-lang, #p-tb  { display:none; }

删除搜索栏:

#p-search { display:none; }

删除讨论页标签选项:

#ca-talk { display:none!important; }

删除“页面”标签选项:

#ca-nstab-main { display:none!important; }

强制UI消息跟随内容语言

有的页面有时应当跟随页面的内容语言,对于多语言站点来说尤其如此。此行为可通过$wgForceUIMsgAsContentMsg 控制。所有用此方式覆盖的消息必须明确给出,比如要让侧边栏指向首页和社区页面的链接根据内容语言指向相应的语言版本,将以下内容添加到

LocalSettings.php

code
$wgForceUIMsgAsContentMsg = [ 'mainpage', 'portal-url' ];

添加或移除工具段落

部分皮肤下,“工具”段落会出现在页面左侧的MediaWiki:Sidebar下方。在Vector 2022中会出现在页面右侧(此处指一般的从左至右书写的语言的右侧)。

MediaWiki 1.43起您可以通过MediaWiki:Sidebar在“工具”段落内新增链接,访问MediaWiki:Sidebar

* empty section
* navigation
* TOOLBOX
** portal-url|Forum

在1.43前通过JavaScript新增工具段落项目

“工具”段落会出现在页面左侧的MediaWiki:Sidebar下方。 工具段落是需要通过编程方法修改的动态元素,你可以通过皮肤扩展,PHP(参见skins/MonoBook.php和创建新皮肤)或JavaScript修改。

JavaScript方案使用User:{用户名}/common.js / MediaWiki:Common.js,MediaWiki 1.9+可用。

现在就可以配置哪些链接应该出现在哪里了。想移除部分链接也随意。

Code

function ModifySidebar( action, section, name, link ) {
	try {
		switch ( section ) {
			case 'languages':
				var target = 'p-lang';
				break;
			case 'toolbox':
				var target = 'p-tb';
				break;
			case 'navigation':
				var target = 'p-navigation';
				break;
			default:
				var target = 'p-' + section;
				break;
		}

		if ( action == 'add' ) {
			var node = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];

			var aNode = document.createElement( 'a' );
			var liNode = document.createElement( 'li' );

			aNode.appendChild( document.createTextNode( name ) );
			aNode.setAttribute( 'href', link );
			liNode.appendChild( aNode );
			liNode.className = 'plainlinks';
			node.appendChild( liNode );
		}

		if ( action == 'remove' ) {
			var list = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];

			var listelements = list.getElementsByTagName( 'li' );

			for ( var i = 0; i < listelements.length; i++ ) {
				if (
					listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
					listelements[i].getElementsByTagName( 'a' )[0].href == link
				)
				{
					list.removeChild( listelements[i] );
				}
			}
		}


	} catch( e ) {
		// 直接忽略异常的抛出
		return;
	}
}

function CustomizeModificationsOfSidebar() {
	// 将[[Special:CategoryTree|Special:CategoryTree]]加入工具段落
	ModifySidebar( 'add', 'toolbox', 'CategoryTree', 'https://en.wikipedia.org/wiki/Special:CategoryTree' );
	// 将[[Special:Upload|Special:Upload]]从工具段落移除
	ModifySidebar( 'remove', 'toolbox', 'Upload file', 'https://en.wikipedia.org/wiki/Special:Upload' );
}

jQuery( CustomizeModificationsOfSidebar );
用法
function CustomizeModificationsOfSidebar() - 请根据需求修改该函数来在特定的部分加入或移除链接:
ModifySidebar( "action", "section", "name", "link" );
参数
action add 添加链接; remove 移除链接
section navigation, toolbox, languages 以及现存的其他自定义段落;给定的链接将在该段落添加或移除
name 链接的文本
link 链接的URL

仅为特定用户组修改

想要将链接的修改限定到特定的用户组(比如,行政员),将以下内容:

jQuery( CustomizeModificationsOfSidebar );

改成这样

if ( mw.config.get( 'wgUserGroups', [] ).indexOf( 'bureaucrat' ) !== -1 ) {
	jQuery( CustomizeModificationsOfSidebar );
}

要将修改限定到特定的IP而不是用户组,使用

if ( mw.config.get( 'wgUserGroups', [] ).indexOf( 'user' ) === -1 ) {
	jQuery( CustomizeModificationsOfSidebar );
}

添加或移除工具段落(PHP)

您可以在文件LocalSettings.php中加入此页面中的钩子函数。这样的话,就可以通过MediaWiki:Sidebar修改工具段落的链接(移除链接,改名字)以及添加自定义链接(比如加入“最近更改”链接而不是导航面板)等等。

为所有用户启用侧边栏可折叠/展开(仅适用于Monobook皮肤)

如果你在使用Monobook皮肤但也想体验(比如说)Vector皮肤的可折叠菜单栏,请将以下代码粘贴到你wiki上的MediaWiki:Monobook.js

/////////////////////////////////////////////////////////
// 此代码片段可使侧边栏项目折叠或展开。 
// 此代码仅适用于Monobook皮肤!!! 
/////////////////////////////////////////////////////////

$( document ).ready( function() {
	// 根据标题默认展开部分条目
	var defaultExpandItems = ['Navigation', 'Orga'];
	// Cookie的前缀,用于保存展开状态
	var expandCookieName = 'disdance_project_wiki_nav_expanded_';

var maxHeights = [];
	var expandeds = [];
	var labels = [];
	initNav();
});

function initNav() {
	$( '#p-logo' ).css({'position': 'relative', 'display': 'block'});
	$( '.generated-sidebar h5,#p-tb h5 ').each( function( i ) {
		var id = $( this ).parent().attr( 'id' );
		maxHeights[id] = $( this ).next( 'div' ).height();
		var str = $( this ).html();
		labels[id] = str;

if ( $.cookie( expandCookieName + id ) == 'false' ) {
			expandeds[id] = false;
			minimize( $( this ) );
		} else if ( $.cookie( expandCookieName + id ) == 'true' ) {
			expandeds[id] = true;
			maximize( $( this ) );
		} else if ( defaultExpandItems.indexOf( str ) == -1 ) {
			expandeds[id] = false;
			minimize( $( this ) );
		} else {
			expandeds[id] = true;
			maximize( $( this ) );
		}
		$( this ).css({'cursor': 'pointer'});
		$( this ).click( toggleNav );
	} );
}

function minimize( target ) {
	var id = $( target ).parent().attr( 'id' );
	// 以下代码的expires参数的值可以更改,这样状态的保存时间可以不是7天(长一点短一点都行)
	$.cookie( expandCookieName + id, 'false', { expires: 7} );
	var str = labels[id] + '  ►';
	$( target ).next( 'div' ).animate({'height': '0px'});
	$( target ).html( str );
}

function maximize( target ) {
	var id = $( target ).parent().attr( 'id' );
	// 以下代码的expires参数的值可以更改,这样状态的保存时间可以不是7天(长一点短一点都行)
	$.cookie( expandCookieName + id, 'true', { expires: 7} );
	var str = labels[id] + '  ▼';
	var newHeight = maxHeights[id];
	$( target ).next( 'div' ).animate({'height': newHeight + 'px'});
	$( target ).html( str );
}

function toggleNav( e ) {
	var id = $(e.target ).parent().attr( 'id' );
	expandeds[id] = !expandeds[id];
	if( expandeds[id] == true ) {
		maximize( e.target );
	} else {
		minimize( e.target );
	}
}

///////////////////////////////////////////////////////
///////////////////////////////////////////////////////

Monobook皮肤的侧边栏宽度(CSS)

要更改侧边栏的宽度,将以下CSS规则加入MediaWiki:Monobook.css

请注意该页面是站点上的页面不是一个文件名。这会将宽度改为15em,因为操作的位置和其他菜单大概占1em左右,所以该例子里使用14em。

/* 增加侧边栏宽度 */
#column-content { margin-left: -15em; }
#column-content #content { margin-left: 15em; }
#p-logo a, #p-logo a:hover { width: 15em; }
#p-cactions { left: 14.5em; }
.portlet { width: 14em; }
#column-content { margin-left: -14em; }
#content.mw-body { margin-left: 14em; }

登录后更改侧边栏内容(PHP)

安装并配置DynamicSidebar 扩展。

侧边栏中的解析器函数

虽然不是很推荐,但是侧边栏确实支持解析器函数(比如解析器函數 ),只要**在解析器函数之外,并且解析器函数不跨行。比如:

*Heading
**{{#ifeq:{{NAMESPACE}}|User|Page-to-link-to{{!}}text-to-show-on-user-page}}
**{{#ifeq:{{NAMESPACE}}|Talk|Another-Page-to-link-to{{!}}text-to-show-on-talk-page}}

是可以的。但以下这样就不行,因为解析器函数跨行了:

*Heading
{{#ifeq:1|1|
**foo{{!}}
bar
|
**baz{{!}}fred
}}

故障排除

更改未显示

如果可能,MediaWiki 会主动缓存内容,这通常会导致导航栏在更改后仍然存在。 清除受影响的页面的缓存应该可以纠正这种情况。 要一次对所有缓存执行批量清除,touch LocalSettings.php 文件或 truncate 数据库中的 objectcache 表(您可能必须同时执行这两项操作)。

您还需要将$wgUseDatabaseMessages 设置为true。 此外,如果您的链接中没有 |,它们将不会显示,因为 Skin.php 中有这行代码: if ( strpos( $line, '|' ) !== false ) {

如果您是用户或普通 wiki 管理员,您将无法执行上述高级操作来显示更改。如果清除也不起作用,您有时仍然可以在预览中立即看到 CSS 更改(尤其是在更改您的个人 CSS 时)。例如:更改侧边栏宽度、填充或边距。不过,更改可能需要一段时间才能在保存后显示出来。如果一段时间后没有任何显示,您可能需要联系整个 wiki,或 wiki 农场的管理员。

小写链接标签

如果您的链接没有按预期大写,请尝试在条形字符周围添加空格;例如:

** http://www.example.com/download.php?file=44555 | 下载

部分内容消失或显示意外内容

如果某个部分不显示或显示意外内容,请通过搜索Special:AllMessages检查标题文本是否不是接口消息的名称。如果是,请使用不同的标题文本,或创建新的界面消息并使用它。

例如,要使用“Sidebar”作为标题文本,请创建仅包含“Sidebar”的界面消息“MediaWiki:Sidebar-header”。 然后,使用 * sidebar-header 作为标头。

如果没有 ** target | link text 形式的链接,则不会显示部分(例如,您忘记链接目标时)。

更新Special:Version后链接失效

例如,每当您的站点语言的侧边栏项目有更新的翻译时,就会发生这种情况。

每次都可以添加新的重定向页面,但更好的解决方案是使用自己的侧边栏项目名称,而不是试图跟踪当前的MediaWiki翻译。

参见

References

  1. (有关为组或用户分配权限的信息,请参阅 手册:用户权限 。) 然后,使用你的wiki上的一个页面链接,但是要把URL/地址栏里你的wiki页面标题替换成MediaWiki:Sidebar(如首页)然后加载那个页面 - 现在你应该看得到侧边栏当前的内容。(如果你使用长URL,可能需要使用语法//您的域名/您的wiki名/index.php?title=MediaWiki:Sidebar&action=edit。) 如果侧边栏的内容已被修改,只需点击“编辑”或“编辑源代码”链接,否则你可能需要通过点击“创建”或“创建源代码”链接先创建页面。
  2. 在某些情况下(例如带有“&”字符的链接)需要一个界面消息。链接目标不能依赖于首选项中设置的界面语言。
  3. Kaare Mikkelsen (25.1.2012): Adding tooltips to sidebar items in MediaWiki (Wayback Machine 30.10.2022)