模块:Main

来自能源智库
SolarLib讨论 | 贡献2016年9月3日 (六) 12:07的版本 (保护“模块:Main”([编辑=仅允许管理员](无限期)[移动=仅允许管理员](无限期))[级联])

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

模板:Translating This module produces a link to a main article or articles. It implements the {{main}} template. Normally, it produces a link like "Main article: A". If used in the category namespace, it produces a link like "The main article for this category is A". It is possible to specify multiple articles, and in this case plural wording is used automatically. If the first link is not an article, the module uses the wording "Main page" instead of "Main article".

Usage from wikitext

This module cannot be used directly from #invoke. Instead, it can only be used through the {{main}} template. Please see the template page for documentation.

Usage from other Lua modules

Load the module:

local mMain = require('Module:Main')

You can then use the _main function like this:

mMain._main(options, ...)

The parameters following options are a list of link/display tables, used to generate the links. The first value in each table is the link, and is required. The second value in each table is the display value, and is optional. Category or file links are automatically escaped using the colon trick. If a link includes a section name, and no display value is set, links are automatically formatted as page § section, rather than the MediaWiki default of page#section.

The options table can be used to configure the function's output. At current, the only option available is "selfref", which is used when the output is a self-reference to Wikipedia. to set this option, use {selfref = true}. (See the {{selfref}} template for more details on self-references.)

Example 1
mMain._main(nil, {'A'})

Produces:

<div class="hatnote relarticle mainarticle">Main article: [[A]]</div>

Displays as: Lua错误:无法创建进程:proc_open不可用。请检查PHP的指令配置“disable_functions”。

Example 2
mMain._main(nil, {'Wikipedia:Categorization'}, {'Help:Category'}, {'Category:Wikipedia categories'})

Produces:

<div class="hatnote relarticle mainarticle">Main pages: [[Wikipedia:頁面分類]], [[Help:分类]] and [[:Category:維基百科分類]]</div>

Displays as: Lua错误:无法创建进程:proc_open不可用。请检查PHP的指令配置“disable_functions”。

Example 3
mMain._main(nil, {'A', 'the letter "A"'}, {'B', 'the letter "B"'}, {'C', 'the letter "C"'})

Produces:

<div class="hatnote relarticle mainarticle">Main articles: [[A|the letter "A"]], [[B|the letter "B"]] and [[C|the letter "C"]]</div>

Displays as: Lua错误:无法创建进程:proc_open不可用。请检查PHP的指令配置“disable_functions”。

Example 4
mMain._main({selfref = true}, {'Wikipedia:Verifiability#Burden'})

Produces:

<div class="hatnote relarticle mainarticle selfref">Main article: [[Wikipedia:Verifiability#Burden|Wikipedia:Verifiability § Burden]]</div>

Displays as: Lua错误:无法创建进程:proc_open不可用。请检查PHP的指令配置“disable_functions”。

Example 5 (if used in the category namespace)
mMain._main(nil, {'A'})

Produces:

<div class="hatnote relarticle mainarticle">The main article for this [[Wikipedia:Categorization|category]] is [[A]]</div>

Displays as:

The main article for this category is A

Technical details

This module uses Module:Hatnote to format the hatnote text, Module:TableTools to process the list of links, and Module:Arguments to fetch the arguments from wikitext.



脚本错误:Lua错误:无法创建进程:proc_open不可用。请检查PHP的指令配置“disable_functions”。

--[[
-- This module produces a link to a main article or articles. It implements the
-- template {{main}}.
-- 
-- If the module is used in category or category talk space, it produces "The
-- main article for this category is xxx". Otherwise, it produces
-- "Main article: xxx".
--]]

local mHatnote = require('Module:Hatnote')
local mTableTools -- lazily initialise
local mArguments -- lazily initialise

local p = {}

function p.main(frame)
	mTableTools = require('Module:TableTools')
	mArguments = require('Module:Arguments')
	local args = mArguments.getArgs(frame, {parentOnly = true})
	local pages = {}
	--模板版的限制
	local limit =10 
	local islimit=false
	local limittext = "<span class=\"error\">(在模板"..frame:expandTemplate{title="tl",args={"main"}}.."中使用了太多的参数)</span>"
	--模板版的限制
	for k, v in pairs(args) do
		if type(k) == 'number' then
			if k > limit then 
				islimit=true 
				break 
			else	
				local display = args['l' .. tostring(k)]
				local page = {v, display}
				pages[k] = page
			end
		end
	end
	pages = mTableTools.compressSparseArray(pages)
	local options = {
		selfref = args.selfref
	}
	return p._main(frame,options, unpack(pages)) .. ((islimit and limittext) or "")
end

function p._main(frame,options, ...)
	-- Get the list of pages. If no first page was specified we use the current
	-- page name.
	local pages = {...}
	local currentTitle = mw.title.getCurrentTitle()
	local firstPageTable = pages[1]
	local firstPage
	if firstPageTable then
		firstPage = firstPageTable[1]
	else
		firstPage = currentTitle.text
		firstPageTable = {firstPage}
		pages[1] = firstPageTable
	end

	-- Find the pagetype.
	local firstPageNs = mHatnote.findNamespaceId(firstPage)
	local pagetype = firstPageNs == 0 and '条目' or '页面'

	-- Make the formatted link text
	local links = mHatnote.formatPageTables(unpack(pages))
	links = mw.text.listToText(links)

	-- Build the text.
	local currentNs = currentTitle.namespace
	local isCategoryNamespace = currentNs - currentNs % 2 == 14
	local stringToFormat
	if isCategoryNamespace then
		stringToFormat = '此[[Wikipedia:頁面分類|分类]]的主%s是%s'
	else
		stringToFormat = '主%s:%s'
	end
	local text = string.format(stringToFormat, pagetype, links)

	-- Process the options and pass the text to the _rellink function in
	-- [[Module:Hatnote]].
	--[[options = options or {}
	local hnOptions = {
		extraclasses = 'noprint relarticle mainarticle' --追加noprint的css类
		,selfref = options.selfref
	}
	return mHatnote._hatnote(text, hnOptions)]]
	return frame:expandTemplate{title="rellink",args={text,extraclasses='noprint relarticle mainarticle'}} --没想到Hatnote与{{rellink}}实现不同,替代品
end

return p