跳转到内容

模块:Test:修订间差异

来自LabAnimalWiki
Czhen留言 | 贡献
无编辑摘要
Czhen留言 | 贡献
无编辑摘要
第1行: 第1行:
local p = {} -- 初始化模块对象
local p = {}


function p.getRandomPages(frame)
function p.listExtensions(frame)
     local args = frame.args
     local result = {"当前 MediaWiki 实例的 mw.ext 对象中包含以下内容:\n"}
     local category = args['category'] or '分类名称' -- 默认分类名称,最好从参数传入
      
     local count = tonumber(args['count']) or 5 -- 默认显示5条,最好从参数传入
     -- 检查 mw.ext 本身是否存在
 
     if type(mw.ext) ~= 'table' then
    -- 使用DPL调用获取分类下的页面列表
         return "mw.ext 不是一个表(table),或者不可用。"
    -- 注意:DPL的调用方式可能因版本和配置而异,以下是一种常见方式
    local dpl_output = mw.ext.DLP.dump({
        category = category,
        notcategory = args['notcategory'], -- 可选:排除的分类
        namespace = args['namespace'] or '0', -- 可选:名字空间,默认为主名字空间(0)
        ordermethod = 'title', -- 初始排序方式,后续会随机化
        mode = 'unordered',
        ignoreerrors = true, -- 忽略错误
        -- 为了性能,初次获取可以限制一个较大的数量,然后从中随机选择
        count = 50 -- 假设我们从分类中最多取50页再进行随机选择
    })
 
    -- 检查DPL是否返回了结果
     if type(dpl_output) ~= 'table' or #dpl_output == 0 then
         return "''该分类下暂无页面或获取页面时出错。''"
     end
     end
 
   
     -- 将DPL输出中的页面标题提取到一个新表中
     -- 遍历 mw.ext 中的所有键值对
    local pages = {}
     for key, value in pairs(mw.ext) do
     for _, page in ipairs(dpl_output) do
        -- 粗略判断类型
         table.insert(pages, page.title)
        local valueType = type(value)
         table.insert(result, "* '''" .. key .. "''' (类型: " .. valueType .. ")\n")
     end
     end
 
      
     -- 随机化页面列表
     if #result == 1 then
     math.randomseed(os.time()) -- 设置随机种子,增加随机性
         table.insert(result, "未发现任何注册的扩展对象。")
    for i = #pages, 2, -1 do
         local j = math.random(i)
        pages[i], pages[j] = pages[j], pages[i] -- 交换元素(Fisher-Yates洗牌算法)
     end
     end
 
      
     -- 只取前`count`个结果
     return table.concat(result)
    local selected_pages = {}
    for i = 1, math.min(count, #pages) do
        table.insert(selected_pages, pages[i])
    end
 
    -- 格式化输出为Wiki文本列表
    local output = {}
    for _, title in ipairs(selected_pages) do
        -- 创建页面链接
        table.insert(output, '* [[' .. title .. ']]')
    end
 
     return table.concat(output, '\n')
end
end


return p
return p

2025年9月8日 (一) 10:15的版本

此模块的文档可以在模块:Test/doc创建

local p = {}

function p.listExtensions(frame)
    local result = {"当前 MediaWiki 实例的 mw.ext 对象中包含以下内容:\n"}
    
    -- 检查 mw.ext 本身是否存在
    if type(mw.ext) ~= 'table' then
        return "mw.ext 不是一个表(table),或者不可用。"
    end
    
    -- 遍历 mw.ext 中的所有键值对
    for key, value in pairs(mw.ext) do
        -- 粗略判断类型
        local valueType = type(value)
        table.insert(result, "* '''" .. key .. "''' (类型: " .. valueType .. ")\n")
    end
    
    if #result == 1 then
        table.insert(result, "未发现任何注册的扩展对象。")
    end
    
    return table.concat(result)
end

return p