mediawikimediawiki-templatessemantic-mediawiki

Semantic Mediawiki - Passing a variable to a template


I have the result of a semantic query. For one of the properties, a comma separated list, I want to separate each item and pass it as a parameter to a template. However, I am struggling to find a way to do this.

For example;

Query:

{{#ask: [[Category:Something]] [[Has title::Somethingelse]]
| mainlabel=-
| ?Has property
| link=none
| format=template
| template=plainText
}}

The plainText template will have the result, which is a comma separated list. Now, from the plainText template I would like to separate the comma separated list and put each value as a parameter into another template.

I have tried using {{#arraydefine:key|values|delimiter|options}} but when I pass {{#arrayindex:key|0}} to the template, the value is not passed. The whole array is passed separated by 0. I have also tried using {{#vardefine: etc but this also does not pass the variable.

My question boils down to, how to pass a variable to a template?

Thanks,


Solution

  • The separation needs to be done in the template. If you use anonymous args like in http://semantic-mediawiki.org/wiki/Template:Query_output_demo

    Your params can be fetched with defaults like this:

    {{{1|param1default}}} {{{2|param2default}}} ...
    

    Now one of your params is a comma separated list. You might want to use the

    #explode
    

    parser function to get to the different parts of the CSV. Lets assume the second parameter has your csv then:

    {{#explode:{{{2}}}|;|0}}
    {{#explode:{{{2}}}|;|1}}
    ...
    

    will provide the fields.

    For this to work you need the extension

    https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##explode

    and to enable it according to the instructions there.