MediaWiki模板表条件列

时间:2017-06-22 17:59:11

标签: html css mediawiki mediawiki-templates

我的MediaWiki中有一个模板,以表格方式显示信息。模板看起来像这样(缩短以获得更好的概述):

{| align="center" border="1" cellpadding="1" cellspacing="1" style="width: 400px"
| colspan="2" style="text-align: center; background-color: {{{Fon1}}}; color: {{{Fon2}}}"|'''Data'''
|-
| colspan="2" style="background-color: {{{Fon1}}}; color: {{{Fon2}}}"|<center>'''Overview'''</center>
|-
{{#if:{{{Soft Skills|}}}|
{{!}} '''Soft Skills'''
{{!}} {{{Soft Skills|}}}
}}
|-
{{#if:{{{Picture|}}}|
{{!}} {{{ Picture|}}}
|-
|}

他们将填充无序列表(<ul><li>Skill One</li><li>Skill Two</li> ... </ul>)。有时可能会有很多,所以我希望他们在有超过5列的时候拿两列。

我查看了条件表,但没有找到任何帮助我的东西。我也搜索过没有stackoverflow,但没有找到任何东西。

这可以以某种方式实现吗?

1 个答案:

答案 0 :(得分:1)

将列表拆分成列非常简单。维基百科上有几个模板执行此操作,最受欢迎的是Template:Div col,它使用CSS列(CSS保存在MediaWiki:Common.css中,您需要将其与所有div col&#39一起复制; s子模板)。您可能还需要调查other column templates,了解它们的工作原理。

困难的部分是检测列表中是否有五个或更多项目。模板只能看到{{{Soft Skills|}}}参数的内容,因此您必须以某种方式解析该项以查找项目数。这很棘手,因为你可以同时拥有MediaWiki风格的无序列表:

* Item 1
* Item 2
* Item 3

以及HTML样式列表:

<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>

此外,HTML样式列表可以包含属性,并且具有不一致的空格等。

相反,您可以重新构建模板以接受多个软技能参数,例如{{{Soft Skill 1}}}{{{Soft Skill 2}}}{{{Soft Skill 3}}}等。然后您可以执行以下操作:

{{#if: {{{Soft Skill 5|}}}
 | {{div col||10em}}
   {{unbulleted list
    |{{{Soft Skill 1|}}}
    |{{{Soft Skill 2|}}}
    |{{{Soft Skill 3|}}}
    |{{{Soft Skill 4|}}}
    |{{{Soft Skill 5|}}}
    |{{{Soft Skill 6|}}}
    |<!-- Add as many more parameters here as you think you will need... -->
   }}
   {{div col end}}
 | {{unbulleted list
    |{{{Soft Skill 1|}}}
    |{{{Soft Skill 2|}}}
    |{{{Soft Skill 3|}}}
    |{{{Soft Skill 4|}}}
   }}
}}

但是,为此你需要Template:Unbulleted list,当然,这是非常难看的代码。

要改进此功能,您可以使用Scribunto扩展名,并在Lua中编写模板。事实上,像上面这样的结构几乎就是Scribunto被引入维基媒体wiki的原因。 (和模板:项目符号列表无论如何都需要Scribunto。)使用Scribunto,你可以编写一个for循环来遍历所有的Soft Skills参数,而不是必须推出循环并且只能迭代有限次数。 / p>

如果你真的想坚持使用一个{{{Soft Skills}}}参数,那么你也可以尝试使用Scribunto来解析它的内容,但由于我上面提到的原因,这很难,而且由于其他极端情况你在解析wikitext时可能会遇到。使用{{{Soft Skill 1}}}{{{Soft Skill 2}}}等参数是更可靠的选择。