1

我正在尝试在我的 MediaWiki 页面的表中显示来自 MySQL DB 的数据。使用外部数据扩展函数#get_db_data 和#for_external_table 获取数据,这些函数运行良好。但是,我还想做两件事:

  • 使用获取的值作为模板名称:当 DB 中的值为 x 时,插入 Template:X(或 {{X}})

  • 在使用 ParserFunctions 扩展的条件中使用(另一个)获取的值。具体来说,返回一个数字。如果数字小于 100,则显示在括号中,否则不显示。

这是到目前为止的代码:

{{#get_db_data:
db=pravidla
|from=alch
|order by=nazev
|data=nazev=nazev,prima=prima,primaproc=prima_proc,sekunda=sekunda,sekundaproc=sekunda_proc,dominanta=dominanta
}}

{| class="wikitable sortable" style="border: solid 1px black"
|+ Tabulka přísad
|''Přísada''
|''Prima''
|''Sekunda''
|''Dominanta'' {{#for_external_table:<nowiki/>
{{!}}-
{{!}} {{{nazev}}}
{{!}} {{{prima}}} ({{{primaproc}}} %)
{{!}} {{{sekunda}}} ({{{sekundaproc}}} %)
{{!}} {{{dominanta}}} }}
|}

prima、sekunda 和dominant 变量中的值应替换为具有相同名称的模板。也不{{{{{prima}}}}}{{Lcb}}{{Lcb}}{{{prima}}}{{Rcb}}{{Rcb}}(其中 Lcb={ 和 Rcb=})都不起作用。

中间两个单元格中的值的括号应仅在值小于 100(百分比)时显示,因此{{#ifeq: {{{primaproc}}} | 100 | | ({{{primaproc}}} %) }}应该按顺序显示类似的内容,但是尽管尝试了,但我还是没有运气。

感谢您阅读本文,欢迎任何见解。

4

1 回答 1

1

我设法通过将 ExternalData 扩展功能替换#for_external_table#display_external_table. 后者将检索到的数据作为变量传递给模板;将相同的代码放在单独的Template:Table row页面中时可以使用。所以解决方案如下所示:

原始页面,显示表格:

{{#get_db_data:
db=pravidla
|from=alch
|order by=nazev
|data=nazev=nazev,prima=prima,primaproc=prima_proc,sekunda=sekunda,sekundaproc=sekunda_proc,dominanta=dominanta
}}

{| class="wikitable sortable" style="border: solid 1px black"
|+ Tabulka přísad
|''Přísada''
|''Prima''
|''Sekunda''
|''Dominanta'' 
{{#display_external_table:
template=Table row
|data=nazev=nazev,prima=prima,primaproc=primaproc,sekunda=sekunda,sekundaproc=sekundaproc,dominanta=dominanta}}
|}

新建Template:Table row页面:

{{!}}-
{{!}} {{{nazev}}}
{{!}} {{ {{{prima}}} }} {{#ifeq: {{{primaproc}}} | 100 |  | ({{{primaproc}}} %) }}
{{!}} {{ {{{sekunda}}} }} {{#ifeq: {{{sekundaproc}}} | 100 |  | ({{{sekundaproc}}} %) }}
{{!}} {{ {{{dominanta}}} }}

使用 prima、sekunda 和dominata 值来调用具有相同名称的模板和括号中百分比的条件显示现在都像一个魅力。

于 2013-10-19T11:29:11.573 回答