首页
随机
登录
设置
关于DJMAX中文资料库
免责声明
DJMAX中文资料库
搜索
查看“︁模块:Db”︁的源代码
←
模块:Db
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
local p = {} -- 1. 国际化和常量 local i18n = { ['true'] = '是', -- 布尔值:真 ['false'] = '否', -- 布尔值:假 ['none'] = '无', ['category_missing_value'] = '缺失%s', ['error_no_type'] = '<span class="error">Db:调用时必须提供type参数。</span>', } -- 2. 辅助函数 -- 导入歌曲数据,从 Module:db_song 中获取数据表 local function GetValuesTable() -- 从 Module:db_song 中获取数据。 return mw.loadData('Module:db_song') end -- 从值列表按照键值获得值,找不到则返回nil。 local function ValueFromValuesByKey(values, key) if values and key then return values[key] end return nil end -- 3. 值格式化方法 (valueMappingMethod) local valueMappingMethod = { -- 格式化函数:将时长(秒)格式化为 'M:SS' 格式 ['duration'] = (function (value) if type(value) == 'number' then local minutes = math.floor(value / 60) local seconds = value % 60 return string.format('%d:%02d', minutes, seconds) end return value end), -- 格式化函数:将艺术家名称自动链接 ['artist'] = (function (value) if type(value) == 'string' and value ~= '' then return '[[' .. value .. ']]' end return value end), } -- 4. 外部调用函数 (p.value) function p.value(f) local args = f local frame = mw.getCurrentFrame() if f == frame then args = require('Module:ProcessArgs').merge(true) end local argTargetName = mw.text.trim(args[1] or '') -- 歌曲ID (键名) local argType = args.type -- 字段名 (type) local argNocat = args.nocat -- 是否禁止分类追踪 if not argType then return i18n['error_no_type'] end -- 1. 加载歌曲数据 local values = GetValuesTable() -- 2. 获取目标歌曲条目 local songEntry = ValueFromValuesByKey(values, argTargetName) if not songEntry then -- [处理歌曲ID缺失...] -- ... (代码省略,与之前版本相同) return i18n['none'] end -- 3. 从歌曲条目中获取特定字段的值 local value = ValueFromValuesByKey(songEntry, argType) if value == nil then -- [处理特定字段的值缺失...] -- ... (代码省略,与之前版本相同) return i18n['none'] end -- 4. 应用格式化 -- **新增:优先级最高的布尔值转换** if type(value) == 'boolean' then if value then return i18n['true'] else return i18n['false'] end end -- 接下来应用字段特定的格式化 if type(valueMappingMethod[argType]) == 'function' then return valueMappingMethod[argType](value) else -- 转换为字符串输出 return tostring(value) end end -- 5. 反向查找 function p.findKeysByValue(f) local args = f local frame = mw.getCurrentFrame() if f == frame then args = require('Module:ProcessArgs').merge(true) end local targetField = mw.text.trim(args.field or '') -- 如果目标值是字符串,清除其两侧空格,否则保持原类型 (如数字) local targetValue = args.value if type(targetValue) == 'string' then targetValue = mw.text.trim(targetValue) end -- 检查必要参数 if targetField == '' or targetValue == nil then return i18n['error_find_keys_args'] end -- 获取所有歌曲数据 local songData = GetValuesTable() local matchingKeys = {} -- 遍历数据,查找匹配的键 for songId, songEntry in pairs(songData) do local currentValue = ValueFromValuesByKey(songEntry, targetField) -- 直接比较当前值和目标值 if currentValue == targetValue then table.insert(matchingKeys, songId) end end -- 对找到的键进行排序 (可选,但有助于规范输出) table.sort(matchingKeys) -- 返回以逗号和空格分隔的歌曲ID列表 return table.concat(matchingKeys, ', ') end return p
该页面使用的模板:
模块:Db/doc
(
查看源代码
)
返回
模块:Db
。