Как использовать параметр в значении #if в mediawiki?

Я пытаюсь создать шаблон MediaWiki:

|-
| {{{name}}}{{#if:{{{ref|}}}|<ref>{{{ref}}}</ref>|}}{{#if:{{{ndb|}}}|<ref>https://ndb.nal.usda.gov/ndb/foods/show/{{{ndb}}}</ref>|}} || {{{size|--}}} || {{{carbs|--}}} || {{{sugar|--}}} || {{{fiber|--}}} || {{{fat|--}}} || {{{protein|--}}}

Большинство из них работает нормально, но если я пройду ref или ndb параметр, #if не работает должным образом, я получаю

<ref>{{{ref}}}</ref>

или же

<ref>https://ndb.nal.usda.gov/ndb/foods/show/{{{ndb}}}</ref>

Я не понимаю, чего бы я ожидал:

<ref>http://the.passed.value/</ref>

или же

<ref>https://ndb.nal.usda.gov/ndb/foods/show/passed_value</ref>

1 ответ

Решение

#if не кажется причиной проблемы. Причина в том, что <ref> не обрабатывается в порядке, который вы ожидаете. Тебе нужно #tag создать тег синтаксического анализатора или расширения на более поздней стадии обработки шаблона:

Template:Google исходный код:

<includeonly><!--
-->{{#if: {{{ref|}}}
   | {{#tag: ref |{{{ref}}}}}
   }}<!--
-->{{#if: {{{q|}}}
   | {{#tag: ref |[https://google.com/search?q={{#urlencode:{{{q}}}}} Google: {{{q}}}]}}
   }}<!--
--></includeonly>

Исходный код страницы:

{{Google
| ref = http://google.com/search?q=foo+bar
| q = foo bar
}}

<references/>

Вывод страницы:

[1] [2]

  1. http://google.com/search?q=foo+bar
  2. Google: фу бар
Другие вопросы по тегам