【问题标题】:MediaWiki template table conditional columnsMediaWiki 模板表条件列
【发布时间】:2017-06-22 17:59:11
【问题描述】:

我的 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|}}}
|-
|}

它们将填充一个无序列表 (&lt;ul&gt;&lt;li&gt;Skill One&lt;/li&gt;&lt;li&gt;Skill Two&lt;/li&gt; ... &lt;/ul&gt;)。有时可能很多,所以我希望他们在超过 5 列时分两列。

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

这能以某种方式实现吗?

【问题讨论】:

    标签: html css mediawiki mediawiki-templates


    【解决方案1】:

    将列表拆分为列相当容易。 Wikipedia 上有几个模板可以做到这一点,最流行的是Template:Div col,它使用 CSS 列(CSS 保存在 MediaWiki:Common.css 中,您需要将其与 div col 的所有子模板一起复制)。您可能还想调查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 引入 Wikimedia wiki 的原因。 (并且模板:项目符号列表无论如何都需要 Scribunto。)使用 Scribunto,您只需编写一个 for 循环来循环所有软技能参数,而不必推出循环并且只能迭代有限次数。

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

    【讨论】:

    • 感谢您提供详尽且消息灵通的回答:D
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多