查看“配置MW:左侧导航栏”的源代码
←
配置MW:左侧导航栏
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:MediaWiki]] == 关于 == <span style="color: green; font-size:120%">'''目标:实现“自定义左侧导航栏”功能。'''</span> == 实现 == 在 MediaWiki 的搜索栏中搜索“[[MediaWiki:Sidebar]]”,即可修改左侧导航栏,栏格式如下: <pre> *导航栏名称一 **链接一地址|链接一名称 **链接二地址|链接二名称 *导航栏名称二 **链接一地址|链接一名称 **链接二地址|链接二名称 </pre> # “<code><span style="color: blue">'''*'''</span></code>”后为'''标题''',可以是:'''“MediaWiki 命名空间”的页面'''(如:“navigation”,即“[[MediaWiki:Navigation]]”)、'''文本内容'''; #* 不能为:“http 链接”或“MediaWiki 内部链接”。 #* 若其后没有“<code>'''**'''</code>”内容,则该标题不显示。 # “<code><span style="color: blue">'''**'''</span></code>”后为'''链接''',可以是:'''“MediaWiki 命名空间”的页面'''(如:“mainpage”,即“[[MediaWiki:Mainpage]]”)、“'''http 链接'''”, #* 不能为:“MediaWiki 内部链接”(“<code><nowiki>[[xxx]]</nowiki></code>”格式)。 默认侧边栏只有两级(标题、链接|名称),若要实现多级链接、树形链接,需要需要修改 MediaWiki 的相关代码,或用 Extension 实现。 == 备注:关于导航项(SEARCH、TOOLBOX、LANGUAGES) == 关于 [[MediaWiki:Sidebar]] 中默认的导航项(SEARCH、TOOLBOX、LANGUAGES),如下: <span style="color: green">* navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LANGUAGES </span> 例如其中“'''TOOLBOX'''”,显示结果为: <span style="color: green">工具 链入页面 相关更改 上传文件 特殊页面 页面信息</span> 我想要在左侧导航栏通过类似方式(模板???)来自定义导航页: * 【2020/09/09 00:40:57】 *: 起初,我以为是需要在“MediaWiki 命名空间”下安装 Sidebar 的规则编写文件就可以,但尝试一番以失败告终。 *: 然后,我考虑是不是这些内容和 skin 有关,并在<code>“skins\Vector\includes\VectorTemplate.php”</code>中看到了线索: *: <syntaxhighlight lang="php" line start="1" highlight="19,26"> 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, ]; } </syntaxhighlight> *: 粗略看了下,自定义导航名称的话当前函数内并没有 <code>Hooks::run( 'VectorAfterToolbox', [], '1.35' );</code> 类似的代码会执行,不知道函数返回之后的流程,就此搁置,以后再看吧。
返回至“
配置MW:左侧导航栏
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息