用户:898646/沙盒5
是的,基本可以确认 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 代码放上去试试看。 测试后告诉我高亮效果如何(比如注释是否变绿),我再帮你优化颜色样式!

沪公网安备 31011002002714 号