如何将Special:WantedPages嵌入为编号列表?
问题解答
1. 是否有参数指定Special:WantedPages的嵌入格式?
MediaWiki通过{{Special:WantedPages}}嵌入特殊页面时,默认输出逗号分隔的纯文本列表,没有官方参数直接修改输出格式。要实现类似原生页面的垂直编号/项目符号列表,可以用以下两种方法:
- 用
#tag函数转换格式:
上述代码会把逗号分隔的内容转换成有序编号列表;如果要无序列表,把#tag:ol {{Special:WantedPages/6}}ol换成ul即可。 - 结合
#explode拆分内容生成列表:
这里{{#explode:{{Special:WantedPages/6}}|,|@@@| # [[$item]] }}#explode会把逗号分隔的页面名拆分成单个条目,再逐个输出带链接的编号列表项。
2. 为什么用StringFunctions的#replace会得到空字符串?
核心原因是解析顺序问题:ParserFunctions(包括#replace)的执行优先级高于嵌入式特殊页面的解析。当#replace运行时,{{Special:WantedPages}}还只是一个未被处理的占位符,没有生成实际的逗号分隔文本,自然找不到逗号进行替换,最终输出空字符串。
要解决这个问题,需要用延迟解析的方式处理,比如编写Lua模块来获取并格式化页面列表:
local p = {} function p.getFormattedWantedPages(frame) local limit = tonumber(frame.args[1]) or 10 local wantedPages = mw.special.page.getWantedPages({limit = limit}) local listItems = {} for idx, page in ipairs(wantedPages) do table.insert(listItems, string.format('%d. [[%s]]', idx, page.title)) end return table.concat(listItems, '\n') end return p
将上述代码保存为模块(比如Module:WantedPagesFormatter),然后通过以下方式调用即可生成带编号的链接列表:
{{#invoke:WantedPagesFormatter|getFormattedWantedPages|6}}
内容的提问来源于stack exchange,提问作者Galactic Ketchup
相关产品推荐
相关产品推荐

