MediaWiki皮肤开发:如何获取菜单项及URL数据以自定义样式
MediaWiki皮肤开发:自定义菜单项类名(获取单个菜单项数据)
直接放弃使用{{{html-items}}},改用Mustache的数组遍历语法单独渲染每个菜单项,就能完全控制li和a标签的类名。
核心逻辑
MediaWiki的Mustache模板上下文里,每个菜单对应的数据都包含items数组,数组内的每个元素就是单个菜单项的原始数据,关键字段包括:
text:菜单项显示文本href:目标URLid:菜单项的唯一标识(可选)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
相关产品推荐
相关产品推荐

