<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=%E9%85%8D%E7%BD%AEMW%EF%BC%9A%E5%B7%A6%E4%BE%A7%E5%AF%BC%E8%88%AA%E6%A0%8F</id>
	<title>配置MW：左侧导航栏 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=%E9%85%8D%E7%BD%AEMW%EF%BC%9A%E5%B7%A6%E4%BE%A7%E5%AF%BC%E8%88%AA%E6%A0%8F"/>
	<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E9%85%8D%E7%BD%AEMW%EF%BC%9A%E5%B7%A6%E4%BE%A7%E5%AF%BC%E8%88%AA%E6%A0%8F&amp;action=history"/>
	<updated>2026-04-17T19:50:55Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=%E9%85%8D%E7%BD%AEMW%EF%BC%9A%E5%B7%A6%E4%BE%A7%E5%AF%BC%E8%88%AA%E6%A0%8F&amp;diff=6118&amp;oldid=prev</id>
		<title>Eijux：​创建页面，内容为“category:MediaWiki  == 关于 ==  &lt;span style=&quot;color: green; font-size:120%&quot;&gt;'''目标：实现“自定义左侧导航栏”功能。'''&lt;/span&gt;  == 实现 == 在 MediaWiki 的搜索栏中搜索“MediaWiki:Sidebar”，即可修改左侧导航栏，栏格式如下： &lt;pre&gt; *导航栏名称一 **链接一地址|链接一名称 **链接二地址|链接二名称  *导航栏名称二 **链接一地址|链接一名称 **链接二地址|链接二名称 &lt;/pre…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E9%85%8D%E7%BD%AEMW%EF%BC%9A%E5%B7%A6%E4%BE%A7%E5%AF%BC%E8%88%AA%E6%A0%8F&amp;diff=6118&amp;oldid=prev"/>
		<updated>2022-08-22T10:07:25Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&lt;a href=&quot;/%E5%88%86%E7%B1%BB:MediaWiki&quot; title=&quot;分类:MediaWiki&quot;&gt;category:MediaWiki&lt;/a&gt;  == 关于 ==  &amp;lt;span style=&amp;quot;color: green; font-size:120%&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;目标：实现“自定义左侧导航栏”功能。&amp;#039;&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;  == 实现 == 在 MediaWiki 的搜索栏中搜索“&lt;a href=&quot;/MediaWiki:Sidebar&quot; title=&quot;MediaWiki:Sidebar&quot;&gt;MediaWiki:Sidebar&lt;/a&gt;”，即可修改左侧导航栏，栏格式如下： &amp;lt;pre&amp;gt; *导航栏名称一 **链接一地址|链接一名称 **链接二地址|链接二名称  *导航栏名称二 **链接一地址|链接一名称 **链接二地址|链接二名称 &amp;lt;/pre…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[category:MediaWiki]]&lt;br /&gt;
&lt;br /&gt;
== 关于 ==&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: green; font-size:120%&amp;quot;&amp;gt;'''目标：实现“自定义左侧导航栏”功能。'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 实现 ==&lt;br /&gt;
在 MediaWiki 的搜索栏中搜索“[[MediaWiki:Sidebar]]”，即可修改左侧导航栏，栏格式如下：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*导航栏名称一&lt;br /&gt;
**链接一地址|链接一名称&lt;br /&gt;
**链接二地址|链接二名称&lt;br /&gt;
&lt;br /&gt;
*导航栏名称二&lt;br /&gt;
**链接一地址|链接一名称&lt;br /&gt;
**链接二地址|链接二名称&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
# “&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;'''*'''&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;”后为'''标题'''，可以是：'''“MediaWiki 命名空间”的页面'''（如：“navigation”，即“[[MediaWiki:Navigation]]”）、'''文本内容'''；&lt;br /&gt;
#* 不能为：“http 链接”或“MediaWiki 内部链接”。&lt;br /&gt;
#* 若其后没有“&amp;lt;code&amp;gt;'''**'''&amp;lt;/code&amp;gt;”内容，则该标题不显示。&lt;br /&gt;
# “&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color: blue&amp;quot;&amp;gt;'''**'''&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;”后为'''链接'''，可以是：'''“MediaWiki 命名空间”的页面'''（如：“mainpage”，即“[[MediaWiki:Mainpage]]”）、“'''http 链接'''”，&lt;br /&gt;
#* 不能为：“MediaWiki 内部链接”（“&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[xxx]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;”格式）。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
默认侧边栏只有两级（标题、链接|名称），若要实现多级链接、树形链接，需要需要修改 MediaWiki 的相关代码，或用 Extension 实现。&lt;br /&gt;
&lt;br /&gt;
== 备注：关于导航项（SEARCH、TOOLBOX、LANGUAGES） ==&lt;br /&gt;
 关于 [[MediaWiki:Sidebar]] 中默认的导航项（SEARCH、TOOLBOX、LANGUAGES），如下：&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;* navigation&lt;br /&gt;
 ** mainpage|mainpage-description&lt;br /&gt;
 ** recentchanges-url|recentchanges&lt;br /&gt;
 ** randompage-url|randompage&lt;br /&gt;
 ** helppage|help-mediawiki&lt;br /&gt;
 * SEARCH&lt;br /&gt;
 * TOOLBOX&lt;br /&gt;
 * LANGUAGES &amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 例如其中“'''TOOLBOX'''”，显示结果为：&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color: green&amp;quot;&amp;gt;工具&lt;br /&gt;
 链入页面&lt;br /&gt;
 相关更改&lt;br /&gt;
 上传文件&lt;br /&gt;
 特殊页面&lt;br /&gt;
 页面信息&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
我想要在左侧导航栏通过类似方式（模板？？？）来自定义导航页：&lt;br /&gt;
* 【2020/09/09 00:40:57】&lt;br /&gt;
*: 起初，我以为是需要在“MediaWiki 命名空间”下安装 Sidebar 的规则编写文件就可以，但尝试一番以失败告终。&lt;br /&gt;
*: 然后，我考虑是不是这些内容和 skin 有关，并在&amp;lt;code&amp;gt;“skins\Vector\includes\VectorTemplate.php”&amp;lt;/code&amp;gt;中看到了线索：&lt;br /&gt;
*: &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot; line start=&amp;quot;1&amp;quot; highlight=&amp;quot;19,26&amp;quot;&amp;gt;&lt;br /&gt;
private function buildSidebar() : array {&lt;br /&gt;
		$skin = $this-&amp;gt;getSkin();&lt;br /&gt;
		$portals = $skin-&amp;gt;buildSidebar();&lt;br /&gt;
		$props = [];&lt;br /&gt;
		$languages = null;&lt;br /&gt;
&lt;br /&gt;
		// Render portals&lt;br /&gt;
		foreach ( $portals as $name =&amp;gt; $content ) {&lt;br /&gt;
			if ( $content === false ) {&lt;br /&gt;
				continue;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Numeric strings gets an integer when set as key, cast back - T73639&lt;br /&gt;
			$name = (string)$name;&lt;br /&gt;
&lt;br /&gt;
			switch ( $name ) {&lt;br /&gt;
				case 'SEARCH':&lt;br /&gt;
					break;&lt;br /&gt;
				case 'TOOLBOX':&lt;br /&gt;
					$portal = $this-&amp;gt;getMenuData(&lt;br /&gt;
						'tb', $content, self::MENU_TYPE_PORTAL&lt;br /&gt;
					);&lt;br /&gt;
					// Run deprecated hook.&lt;br /&gt;
					// Use SidebarBeforeOutput instead.&lt;br /&gt;
					ob_start();&lt;br /&gt;
					Hooks::run( 'VectorAfterToolbox', [], '1.35' );&lt;br /&gt;
					$props[] = $portal + [&lt;br /&gt;
						'html-hook-vector-after-toolbox' =&amp;gt; ob_get_clean(),&lt;br /&gt;
					];&lt;br /&gt;
					break;&lt;br /&gt;
				case 'LANGUAGES':&lt;br /&gt;
					$portal = $this-&amp;gt;getMenuData(&lt;br /&gt;
						'lang',&lt;br /&gt;
						$content,&lt;br /&gt;
						self::MENU_TYPE_PORTAL&lt;br /&gt;
					);&lt;br /&gt;
					// The language portal will be added provided either&lt;br /&gt;
					// languages exist or there is a value in html-after-portal&lt;br /&gt;
					// for example to show the add language wikidata link (T252800)&lt;br /&gt;
					if ( count( $content ) || $portal['html-after-portal'] ) {&lt;br /&gt;
						$languages = $portal;&lt;br /&gt;
					}&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					// Historically some portals have been defined using HTML rather than arrays.&lt;br /&gt;
					// Let's move away from that to a uniform definition.&lt;br /&gt;
					if ( !is_array( $content ) ) {&lt;br /&gt;
						$html = $content;&lt;br /&gt;
						$content = [];&lt;br /&gt;
						wfDeprecated(&lt;br /&gt;
							&amp;quot;`content` field in portal $name must be array.&amp;quot;&lt;br /&gt;
								. &amp;quot;Previously it could be a string but this is no longer supported.&amp;quot;,&lt;br /&gt;
							'1.35.0'&lt;br /&gt;
						);&lt;br /&gt;
					} else {&lt;br /&gt;
						$html = false;&lt;br /&gt;
					}&lt;br /&gt;
					$portal = $this-&amp;gt;getMenuData(&lt;br /&gt;
						$name, $content, self::MENU_TYPE_PORTAL&lt;br /&gt;
					);&lt;br /&gt;
					if ( $html ) {&lt;br /&gt;
						$portal['html-items'] .= $html;&lt;br /&gt;
					}&lt;br /&gt;
					$props[] = $portal;&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		$firstPortal = $props[0] ?? null;&lt;br /&gt;
		if ( $firstPortal ) {&lt;br /&gt;
			$firstPortal[ 'class' ] .= ' portal-first';&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return [&lt;br /&gt;
			'has-logo' =&amp;gt; $this-&amp;gt;isLegacy,&lt;br /&gt;
			'html-logo-attributes' =&amp;gt; Xml::expandAttributes(&lt;br /&gt;
				Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) + [&lt;br /&gt;
					'class' =&amp;gt; 'mw-wiki-logo',&lt;br /&gt;
					'href' =&amp;gt; Skin::makeMainPageUrl(),&lt;br /&gt;
				]&lt;br /&gt;
			),&lt;br /&gt;
			'array-portals-rest' =&amp;gt; array_slice( $props, 1 ),&lt;br /&gt;
			'data-portals-first' =&amp;gt; $firstPortal,&lt;br /&gt;
			'data-portals-languages' =&amp;gt; $languages,&lt;br /&gt;
		];&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
*: 粗略看了下，自定义导航名称的话当前函数内并没有 &amp;lt;code&amp;gt;Hooks::run( 'VectorAfterToolbox', [], '1.35' );&amp;lt;/code&amp;gt; 类似的代码会执行，不知道函数返回之后的流程，就此搁置，以后再看吧。&lt;/div&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
</feed>