You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaWiki皮肤开发:如何获取菜单项及URL数据以自定义样式

MediaWiki皮肤开发:自定义菜单项类名(获取单个菜单项数据)

直接放弃使用{{{html-items}}},改用Mustache的数组遍历语法单独渲染每个菜单项,就能完全控制li和a标签的类名。

核心逻辑

MediaWiki的Mustache模板上下文里,每个菜单对应的数据都包含items数组,数组内的每个元素就是单个菜单项的原始数据,关键字段包括:

  • text:菜单项显示文本
  • href:目标URL
  • id:菜单项的唯一标识(可选)
  • active:布尔值,标记是否为当前活跃页面的菜单项

示例Mustache模板代码

<!-- 以主导航菜单为例,替换成你实际使用的菜单变量名 -->
<ul class="main-nav">
  {{#items}}
    <li class="nav-item {{#active}}nav-item-active{{/active}} custom-li-class">
      <a href="{{href}}" class="nav-link custom-a-class">{{text}}</a>
    </li>
  {{/items}}
  {{^items}}
    <li class="nav-item">暂无菜单</li>
  {{/items}}
</ul>

确保PHP层数据正确传递

在你的皮肤类(继承SkinMustache)的getTemplateData()方法中,要确保菜单的原始数据被正确注入上下文。比如处理个人工具菜单:

public function getTemplateData() {
    $data = parent::getTemplateData();
    // 将个人工具菜单的原始数据传入模板上下文
    $data['personal_menu'] = $this->getPersonalTools();
    // 其他菜单(如主导航、侧边栏)同理,根据实际方法获取数据
    return $data;
}

进阶自定义:给特定菜单项加专属类

如果需要给某个特定菜单项(比如退出登录)单独加类,可以在PHP层修改菜单项数据:

public function getTemplateData() {
    $data = parent::getTemplateData();
    $personalTools = $this->getPersonalTools();
    
    // 遍历菜单项,给指定ID的项添加自定义类字段
    foreach ($personalTools['items'] as &$item) {
        if ($item['id'] === 'logout') {
            $item['custom_class'] = 'logout-btn';
        }
    }
    
    $data['personal_menu'] = $personalTools;
    return $data;
}

然后在Mustache模板中引用:

<li class="nav-item {{custom_class}} {{#active}}active{{/active}}">
  <a href="{{href}}" class="nav-link">{{text}}</a>
</li>

内容的提问来源于stack exchange,提问作者nasirkhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:37:03