打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

本站正在进行早期测试,目前仍存在许多内容的缺失。

模块:Common:修订间差异

来自星砂岛百科
Sizau留言 | 贡献
无编辑摘要
Sizau留言 | 贡献
无编辑摘要
第81行: 第81行:
     end
     end


     local title = mw.title.makeTitle(6, name)
     local path = p.getFilePath(mw.getCurrentFrame(), name)
     local exists = title ~= nil and title.exists or false
     local exists = path ~= ''
     cache[cacheKey] = exists
     cache[cacheKey] = exists
     return exists
     return exists
第96行: 第96行:
     if cache[cacheKey] ~= nil then
     if cache[cacheKey] ~= nil then
         return cache[cacheKey]
         return cache[cacheKey]
    end
    if not p.filePageExists(name) then
        cache[cacheKey] = ''
        return ''
     end
     end



2026年3月9日 (一) 20:35的版本

概述

Common 提供中文百科 Lua 模块的基础通用能力,包括参数读取、JSON 数据页加载、文件存在判断和 LuaCache 辅助。

用法

local common = require('Module:Common')

local title = common.getCurrentTitleText()
local data = common.loadJsonData('数据:Item/item_mapping.json')
local key = common.normalizeKey(title)

示例

local common = require('Module:Common')

local cache_key = common.buildLuaCacheKey('demo', '1', 'example')
local cached = common.luaCacheGet(cache_key)
if cached == nil then
    cached = common.trim(' test ')
    common.luaCacheSet(cache_key, cached, 300)
end
return cached

函数

  • trim:去除首尾空白。
  • getArg:从 frame 与父级模板中读取参数。
  • toText:将布尔值、数组或普通值转成文本。
  • normalizeKey:统一键名格式。
  • loadJsonData:安全读取数据页 JSON。
  • getCurrentTitleText:返回当前页面标题。
  • filePageExists:判断文件页是否存在。
  • getFilePath:获取文件路径缓存值。
  • buildLuaCacheKeyluaCacheGetluaCacheSet:LuaCache 辅助函数。

local p = {}

local cache = {}

function p.trim(value)
    if value == nil then
        return ''
    end
    return mw.text.trim(tostring(value))
end

function p.getArg(frame, key, default)
    local value = frame.args[key]
    if value == nil and frame:getParent() then
        value = frame:getParent().args[key]
    end
    value = p.trim(value)
    if value == '' then
        return default or ''
    end
    return value
end

function p.toText(value, sep)
    if value == nil then
        return ''
    end
    if type(value) == 'boolean' then
        return value and '是' or '否'
    end
    if type(value) == 'table' then
        local parts = {}
        for _, item in ipairs(value) do
            parts[#parts + 1] = tostring(item)
        end
        return table.concat(parts, sep or '、')
    end
    return tostring(value)
end

function p.normalizeKey(value)
    return mw.ustring.lower(p.trim(value))
end

function p.loadJsonData(titleText)
    local pageName = p.trim(titleText)
    if pageName == '' then
        return nil
    end

    local cacheKey = 'json:' .. pageName
    if cache[cacheKey] ~= nil then
        return cache[cacheKey] or nil
    end

    local ok, data = pcall(mw.loadJsonData, pageName)
    if not ok or type(data) ~= 'table' then
        cache[cacheKey] = false
        return nil
    end

    cache[cacheKey] = data
    return data
end

p.readJsonPage = p.loadJsonData

function p.getCurrentTitleText()
    return mw.title.getCurrentTitle().text
end

function p.filePageExists(fileName)
    local name = p.trim(fileName)
    if name == '' then
        return false
    end

    local cacheKey = 'file-exists:' .. name
    if cache[cacheKey] ~= nil then
        return cache[cacheKey]
    end

    local path = p.getFilePath(mw.getCurrentFrame(), name)
    local exists = path ~= ''
    cache[cacheKey] = exists
    return exists
end

function p.getFilePath(frame, fileName)
    local name = p.trim(fileName)
    if name == '' or not frame then
        return ''
    end

    local cacheKey = 'filepath:' .. name
    if cache[cacheKey] ~= nil then
        return cache[cacheKey]
    end

    local path = p.trim(frame:callParserFunction('filepath', name))
    cache[cacheKey] = path
    return path
end

return p