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