全站通知:

用户:898646/沙盒5

来自高达WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
是的,基本可以确认 SyntaxHighlight 插件目前无法正常工作(服务器端 Pygments 配置问题)。既然你无法修改 LocalSettings.php,那就绕过它,用客户端 JavaScript 来实现类似效果。推荐方案:用 JavaScript + Highlight.js(无需管理员权限)在你的 wiki 安装 Highlight.js(纯前端,高亮效果不错)在 MediaWiki:Common.js(或你自己的 Gadget)中加入以下代码:

javascript

// ==================== Wikitext 语法高亮显示 ====================
mw.loader.load('https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css', 'text/css');

mw.hook('wikipage.content').add(function() {
    // 自动处理所有 class="mw-highlight-wikitext" 的 pre/code 块
    document.querySelectorAll('pre.mw-highlight-wikitext, code.mw-highlight-wikitext').forEach(function(block) {
        // 加载 highlight.js(只加载一次)
        if (!window.hljs) {
            mw.loader.getScript('https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js').then(function() {
                hljs.highlightElement(block);
            });
        } else {
            hljs.highlightElement(block);
        }
    });
});

在你要显示原始 wikitext 的页面这样写(动态获取)

wiki

'''页面 "你的范本页" 的原始 wikitext:'''

{{#invoke:Page|getWikitextRaw|你的范本页}}

修改你的 Module:Page(Lua 部分)为下面这个纯文本输出版本:lua

local p = {}

function p.getWikitextRaw(frame)
    local titleStr = frame.args[1] or frame:getTitle()
    local page = mw.title.new(titleStr)
    if not page or not page.exists then
        return '❌ 页面不存在:' .. titleStr
    end
    
    local text = page:getContent() or ''
    
    -- 输出带 class 的 pre,让 JS 高亮
    return '<pre class="mw-highlight-wikitext mw-code" style="white-space: pre-wrap; overflow-x: auto;">' ..
           mw.text.nowiki(text) ..
           '
'

end

return p

效果说明注释 <!-- --> 会变成绿色 模板 {{ }}、| 参数会高亮(蓝色/紫色等) 链接 [[ ]] 也会突出 支持滚动、自动换行

Highlight.js 的 wikitext 支持不算完美(比 Pygments 稍弱),但已经能满足你“注释绿色、模板蓝色”的基本需求。其他备选(如果你不想用 CDN)用更轻量的 Prism.js(替换上面的 highlight.js 链接)。 如果你希望只高亮特定页面,可以把 JS 写成一个 Gadget,让用户自行启用。

把上面的 Lua + Common.js 代码放上去试试看。 测试后告诉我高亮效果如何(比如注释是否变绿),我再帮你优化颜色样式!