将列表作为模板的参数传递

Passing a list as the parameter of a template

我在我的 MediaWiki 中创建了一个模板,我想将其传递给 "free text"。为简单起见,将其想象成一个 table,其中第一个命名参数进入单元格 1,另一个命名参数进入单元格 2。

编写模板本身似乎很容易,但是当我尝试在参数中传递某些结构时,我总是犯错误。我的第一个问题是代码块:如果我写

{{MyTemplate|first=

    // code...

|other=

    // other code instead...

}}

然后 wiki 认为管道字符是预格式化文本块的一部分,最后我没有第二个参数。 此问题已使用

 解决,但我认为它更像是一种解决方法,而不是解决方案。 

现在我尝试传递列表时又遇到麻烦了:

{{MyTemplate|first=

* Item 1a
* Item 2a

|other=

* Item 1b
* Item 2b

}}

同样,我最终得到第一个项目(项目 1a)被忽略(未呈现为列表项),第二个呈现正常(项目 2a,作为列表项), 然后是双竖线、星号和 "Item 1b",然后列表继续 "Item 2b"。

我显然做错了什么,但我不知道该怎么做,也无法在文档中找到任何有用的示例。请帮助我理解如何正确地将任何文本(可能包括列表或其他降价结构)作为模板参数传递。

编辑

这是我的模板代码:

{|
!First !!Other
|-
|{{{first|}}} ||{{{other|}}}
|}

另外,很抱歉,我输入了错误的用法:另外四个空格是上面代码片段的剩余部分。我已经修好了。

@Ivanhercaz 我试过你的建议(只是空行和我的不同),结果还是一样。

在这种情况下,我必须假设您创建的模板如何,因为您没有共享结构,只是调用方式和两个参数。由于这个原因,我假设您将模板创建为:

{{{first|}}}
{{{other|}}}

关于你的第一个问题,你可以使用{{!}}来转义管道字符(|)。从 1.24 版本开始,这是一个 magic word,但在此之前解决此问题的方法是创建一个带有管道的模板,然后将 | 替换为 {{!}}。 magic word的使用是一样的,只是不用你自己创建模板。

关于你的第二个问题,考虑到你的结构与我在这个答案顶部写的类似,如果我用这个写一个页面:

{{MyTemplate|first=

    * Item 1a
    * Item 2a

|other=

    * Item 1b
    * Item 2b

}}

我得到了两个列表和两个代码块:列表一个 "Item 1a" 和第一个代码块 * Item 2a;用 "Item 2a" 列出两个,用 * Item 2b 列出第二个代码块。它似乎不是你得到的渲染:

the first item (Item 1a) ignored (not rendered as a list item), the second rendered ok (Item 2a, as a list item), then a double pipe, an asterisk and "Item 1b", then the list goes on with "Item 2b". This happened due to the extra space before the * in the parameters.

所以我推荐给大家分享一下模板的代码,以便更好的给大家查看和解答。当然,如果你想要在每个参数中传递两个不同的列表,你可以像这样:

{{Test|first=
* Item 1a
* Item 2a
|other=
* Item 1b
* Item 2b
}}

这个结构解决了我提到的问题。但我会等待您的评论确定并在必要时编辑我的答案。

编辑

现在,通过模板代码我明白了你的问题。为了正确地工作并且没有问题地使用模板、tables 和列表,您必须考虑 * 需要在 ||| 之后有一个换行符。我向您推荐的是插入此换行符

{|
! Wikitext !! Rendering
|- 
|
{{{first|}}}
||
{{{other|}}}
|}

我认为这是一种简单明了的方法来完成您正在尝试的事情。因此,如果您以这种方式使用模板:

{{Test
|first=* Item 1a
* Item 2a
|other=* Item 1b
* Item 2b
}}

或者换一种方式:

{{Test
|first=
* Item 1a
* Item 2a
|other=
* Item 1b
* Item 2b
}}

你会有一个这样的table(我加一个class=wikitable有一个更漂亮的table来展示):

希望这个技巧对您有所帮助。