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

无服务器权限无法装扩展,如何实现MediaWiki动态页面节模板?

解决DynamicPageSections模板空输出问题的方案

核心思路

MediaWiki模板是服务器端解析,自定义JS则是客户端执行,两者时序不同——模板渲染时JS还未运行,所以直接尝试把JS生成的结构传给模板必然得到空值。正确做法是:模板提供带标识的占位元素,JS识别该元素后,通过API拉取页面节数据,动态生成有序列表并替换占位内容。

步骤1:创建模板代码

在Wiki中创建Template:DynamicPageSections,内容如下:

<div class="dynamic-page-sections" data-page="{{{page_title|{{PAGENAME}}}}}">
<!-- JS将替换此注释为节列表 -->
</div>
  • data-page属性存储目标页面名称,默认使用当前页面({{PAGENAME}}),支持通过page_title参数指定
  • 空div作为JS的目标占位容器

步骤2:编写Common.js处理逻辑

在MediaWiki:Common.js中添加以下代码:

// 等待页面DOM加载完成后执行
$(document).ready(function() {
    // 遍历所有动态节列表占位符
    $('.dynamic-page-sections').each(function() {
        const $container = $(this);
        const targetPage = $container.data('page');
        
        // 调用MediaWiki API获取页面节数据
        $.getJSON('/api.php', {
            action: 'parse',
            page: targetPage,
            prop: 'sections',
            format: 'json'
        }).done(function(data) {
            if (data.parse && data.parse.sections) {
                // 生成有序列表
                const $ol = $('<ol></ol>');
                data.parse.sections.forEach(section => {
                    // 跳过顶级空节(部分页面会返回无效空节)
                    if (section.line.trim() === '') return;
                    // 生成标准内部链接并转成HTML
                    const linkUrl = mw.util.getUrl(targetPage + '#' + section.anchor);
                    const $link = $('<a>').attr('href', linkUrl).text(section.line);
                    $ol.append($('<li>').append($link));
                });
                // 替换占位符内容
                $container.html($ol);
            } else {
                $container.html('<p>无法加载页面节数据</p>');
            }
        }).fail(function() {
            $container.html('<p>加载页面节数据失败</p>');
        });
    });
});

代码说明:

  • 用action=parse+prop=sections的API组合直接获取结构化的节数据,避免XML解析的繁琐
  • 借助mw.util.getUrl生成符合Wiki规则的内部链接,适配不同URL路径配置
  • 处理了API请求失败、无有效节数据的异常场景

步骤3:测试模板使用

在任意页面调用模板:

{{DynamicPageSections|page_title=目标页面名称}}

页面加载完成后,JS会自动将占位符替换为目标页面的节有序列表,每个列表项都直接链接到对应节的锚点。

常见问题排查

  • 仍显示空内容:打开浏览器控制台检查JS报错,排查页面名称拼写错误、API请求权限问题(专用部署一般无此问题)
  • 节列表不全:部分隐藏节或特殊节可能不被API返回,可在API参数中添加disablepp=1尝试
  • 链接跳转异常:若Wiki使用非标准URL路径,调整mw.util.getUrl的参数格式即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:26:02