1

我正在 mediawiki 中创建一个模板,该模板仅在该信息可用时才可选择包含一条信息。该信息是使用作为模板参数传递的文章中的语义媒体维基注释获得的。问题在于将多个查询{{#if: ...}}与 AND 和 OR 组合在一起非常麻烦且容易出错。我现在做的方式看起来像

{{#ifexist: {{{1}}} | {{#if: {{#if: {{#show: {{{1}}} | ?prop1 }} |
  {{#if: {{#show: {{{1}}} | ?prop2 }} | {{#show {{{1}}} | ?prop3 }} }}
  {{#if: ... }} ... | ... }}

所以第二个和第三个#ifs 基本上是对 AND 进行编码,而第二个和第四个是对 OR 进行编码,也就是说,它类似于if ((prop1 in {{{1}}}) and (prop2 in {{{1}}}) and (prop3 in {{{1}}})) or .... 这#ifexist是必要的,因为当wiki 中的文章不存在#show时会返回错误(不是空字符串) 。{{{1}}}我有大约 6 个 OR 和 18 个 AND,因此您可以想象阅读它会变得多么漫长和困难。我想知道是否有更直接的方式来表达这些连接词,特别是 AND 需要这种丑陋的嵌套#ifs 编码。

如果您想知道我在哪里需要这么长的 if,我正在处理的实际模板在这里:https ://psychonautwiki.org/wiki/Template:Summary

4

1 回答 1

3

MediaWiki 模板不是编程语言;如果这对您来说是个问题,那么您可能做错了。尝试使用实际的编程语言

如果压力很大,我会使用{{#ifexpr}}

{{#ifexpr:
  {{#ifexist: {{{1}}} | 1 | 0 }}
  and (
    {{#show: {{{1}}} | ?prop1 | 1 | 0 }}
    and {{#show: {{{1}}} | ?prop2 | 1 | 0 }}
    or
    {{#show: {{{1}}} | ?prop3 | 1 | 0 }}
    ...
  )
|...}}

如果您需要根据条件在多个输出之间进行选择,{{#switch}}那么旧switch(true)技巧也可以派上用场:

{{#switch:1
| {{#show: {{{1}}} | ?prop1 | 1 | 0 }} = option 1
| {{#show: {{{1}}} | ?prop2 | 1 | 0 }} = option 2
...
}}
于 2015-10-16T07:13:30.853 回答