>我的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 列时采取两列。
我查看了条件表,但没有找到任何对我有帮助的东西。我也搜索了没有堆栈溢出,但没有找到任何东西。
这能以某种方式实现吗?
将列表拆分为列相当容易。维基百科上有几个模板可以做到这一点,最受欢迎的是Template:Div col,它使用CSS列(CSS保存在MediaWiki:Common.css中,你需要将其与div col的所有子模板一起复制)。您可能还需要调查其他列模板以了解它们的工作原理。
困难的部分是检测列表中是否有五个或更多项目。模板只能看到{{{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|}}}
}}
}}
但是,为此您需要模板:非项目符号列表,当然,这是非常丑陋的代码。
为了改善这一点,您可以使用 Scribunto 扩展,并在 Lua 中编写模板。事实上,像上面这样的结构几乎是Scribunto被引入维基媒体wiki的原因。(和模板:项目符号列表无论如何都需要 Scribunto。使用 Scribunto,您只需编写一个 for 循环来循环所有软技能参数,而不必推出循环并且只能迭代有限次数。
如果你真的想坚持使用一个{{{Soft Skills}}}
参数,那么你也可以尝试使用Scribunto来解析它的内容,但由于我上面提到的原因,以及你在解析wiki文本时可能遇到的其他极端情况,这将很困难。使用{{{Soft Skill 1}}}
、{{{Soft Skill 2}}}
等参数是更可靠的选择。