置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:Call

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [查看] [编辑] [历史] [刷新]

本模块用于在一个模板(Caller)中调用另一个模板(Callee)。由于技术限制,请直接在Caller中使用{{#invoke:Call}}调用此模块。

用法

{{#invoke:Call|main|模板名[|其他参数]}}
输入
  • 1:模板(Callee)名。
  • 其他参数:可以在模板(Caller)中指定调用另一个模板(Callee)时的参数。若其他页面(Page)调用此模板(Caller)时指定了同名参数,则页面(Page)中指定的参数值不会起作用,即模板(Caller)源代码中的参数具有较高的优先级。
输出
调用Callee的结果,其参数由Caller的源代码和调用Caller的页面指定。

局限性

由于Lua自身的局限性,具名参数的传入顺序并非是确定的,因此使用{{#forargs:}}解析器函数的结果可能与预期不符。

local p = {}
local getArgs = require('Module:Arguments').getArgs

function p._main(frame, args, is_default_value)
	local calleeName = args[1]
	if (not calleeName) or (calleeName == "") then
		return ""
	end
	local wrapperArgs = getArgs(frame, { parentOnly = true })
	for k, v in pairs(args) do
		local k_number = tonumber(k)
		if k_number then
			if k_number > 1 then
				if not (wrapperArgs[k_number - 1] and is_default_value) then
					wrapperArgs[k_number - 1] = v
				end
			end
		else
			if not (wrapperArgs[k] and is_default_value) then
				wrapperArgs[k] = v
			end
		end
	end
	-- mw.logObject(wrapperArgs)
	return frame:expandTemplate({ title = calleeName, args = wrapperArgs })
end

function p.main(frame)
	return p._main(frame, getArgs(frame, { frameOnly = true }), false)
end

function p.default(frame)
	return p._main(frame, getArgs(frame, { frameOnly = true }), true)
end
return p