mediawiki中的连接词{{#if:...}}

时间:2015-10-12 15:31:55

标签: mediawiki mediawiki-templates semantic-mediawiki

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

{{#ifexist: {#if} | {{#if: {{#if: {{#show: {if ((prop1 in {#ifexist}) and (prop2 in {#show}) and (prop3 in {{#if}})) or ...} | ?prop1 }} |
  {{#if: {{#show: {optinCinfirmationActionAfterSuccessfulConfirmation} | ?prop2 }} | {{#show {ajaxRequest: function(url, callback) {
    var xmlHTTP= new XMLHttpRequest();
    xmlHTTP.onreadystatechange= function() {
        if(xmlHTTP.readyState == XMLHttpRequest.DONE) {
            // success code
            // 0 for Google Chrome
            // 200 for Android webview
            // 200 in jQuery
            if(xmlHTTP.status === 0 ) {
                callback(xmlHTTP.responseText);
            }
        }
    }

    xmlHTTP.open("GET", url, true);
    xmlHTTP.send();
}
} | ?prop3 }} }}
  {{#if: ... }} ... | ... }}

所以第二个和第三个ajaxRequest("json/1.json", function(response) { }); 基本上编码一个AND,而第二个和第四个{n}连接一个OR,也就是说,它类似于$.get( "json/1.json", function( data ) { }); age是必需的,因为当global age作为Wiki中的文章不存在时,allowPermission会返回错误(不是空字符串)。我有大约6个OR和18个AND,所以你可以想象它的读取时间有多长。我想知道是否有更直接的表达这些连接词的方式,特别是AND,需要使用嵌套的 if (choice == 3) { Console.WriteLine("=====Payroll Summary====="); Console.WriteLine("You need to pay " + (project[0].paY) + " Baht for " + project[0].EmpName); Console.WriteLine("You need to pay " + (salary[0].Pay(salary[0].Hour) + " Baht for " + salary[0].EmpName); } 进行这种丑陋的编码。

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

1 个答案:

答案 0 :(得分:2)

MediaWiki模板不是编程语言;如果这对你来说是个问题,你可能做错了。请改为an actual programming language

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

{{#ifexpr:
  {{#ifexist: {switch(true)} | 1 | 0 }}
  and (
    {{#show: {{{#switch:1
| {{#show: {Hope i understood your question,
This query results expected output : 

SELECT Row_number()
                OVER (
                  PARTITION BY DealerID
                  ORDER BY DealerPK)RN,
              DealerPK,
              DealerID,
              IsPrimaryDealer,
              DealerName,
              DateAdded
       FROM   #temp
       ORDER  BY DealerID DESC
} | ?prop1 | 1 | 0 }} = option 1
| {{#show: {vtkRenderWindow} | ?prop2 | 1 | 0 }} = option 2
...
}}
} | ?prop1 | 1 | 0 }}
    and {{#show: {void SetSize(int width, int height)} | ?prop2 | 1 | 0 }}
    or
    {{#show: {vtkWindow} | ?prop3 | 1 | 0 }}
    ...
  )
|...}}

如果您需要根据条件在多个输出之间进行选择,{{#switch}}和旧NSDateFormatter技巧也可以很方便:

NSDate