2017-06-22 61 views
0

我在我的MediaWiki中有一個模板以表格方式顯示信息。模板看起來像這樣(縮短了更好的概述):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,但沒有找到任何東西。

這可以以某種方式實現嗎?

回答

0

將列表拆分成列很容易。維基百科上有幾個模板可以做到這一點,其中最受歡迎的是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被引入維基媒體維基的原因。 (和Template:Bulleted list無論如何都需要Scribunto。)通過Scribunto,你可以寫一個for循環來遍歷所有的軟技能參數,而不必展開循環並且只能迭代有限的次數。

如果你確實想堅持一個{{{Soft Skills}}}參數,那麼你也可以嘗試使用Scribunto來解析它的內容,但由於我上面提到的原因,以及由於其他角落案例你可能遇到解析wikitext時。使用參數如{{{Soft Skill 1}}},{{{Soft Skill 2}}}等是更可靠的選擇。

+0

感謝您的詳盡和明智的答案:D –