rp>Patrick |
rp>Patrick |
Line 1: |
Line 1: |
− | <includeonly>{{{{{|safesubst:}}}{{{{{|safesubst:}}}#ifeq:{{{1}}}|eq|p1|p2}}|{{{{{|safesubst:}}}{{{{{|safesubst:}}}#ifeq:{{{2}}}|{{{3}}}|p1|p2}}|{{{4|}}}|{{{5|}}}}}|{{{{{|safesubst:}}}{{{{{|safesubst:}}}#switch:{{{{{|safesubst:}}}#if{{{1}}}:{{{2}}}|p1|p2}}|p1=p1|p2={{{{{|safesubst:}}}#ifeq:{{{1}}}|error|{{{{{|safesubst:}}}#ifeq:{{{4|+}}}|{{{4|-}}}|p2|p3}}|p2}}|if/errmsg}}|{{{3}}}|{{{4|}}}|{{{2}}}}}}}</includeonly><noinclude><div class="template-documentation" style="margin-top:1em;">{{#if:defaultnotblank|<div style="padding-bottom:3px; border-bottom:1px solid #aaa; margin-bottom:1ex;"> | + | <includeonly>{{{{{|safesubst:}}}{{{{{|safesubst:}}}#if:{{{1}}}|p1|p2}}|{{{2}}}|{{{3|}}}}}</includeonly><noinclude><div class="template-documentation" style="margin-top:1em;">{{#if:defaultnotblank|<div style="padding-bottom:3px; border-bottom:1px solid #aaa; margin-bottom:1ex;"> |
| <span style="font-size:150%">Documentation</span></div>}} | | <span style="font-size:150%">Documentation</span></div>}} |
| {{Documentation subpage}} | | {{Documentation subpage}} |
− | With this template the parser functions of [[mw:Help:Extension:ParserFunctions|Extension:ParserFunctions]] with names starting with "#if" can be used in a way such that they do not [[Help:Newlines_and_spaces#Stripping_on_expansion|strip spaces and newlines]] from the "then" and "else" part. For evaluating the condition spaces and newlines are stripped like with ParserFunctions. | + | With this template [[mw:Help:Extension:ParserFunctions|#if]] can be used in a way such that it does not [[Help:Newlines_and_spaces#Stripping_on_expansion|strip spaces and newlines]] from the "then" and "else" part. For evaluating the condition spaces and newlines are stripped like with ParserFunctions. |
| | | |
| ==Usage== | | ==Usage== |
− | * 4 parameters:
| + | *<code><nowiki>{{ifnotempty|x| p | q }}</nowiki></code> gives "{{ifnotempty|x| p | q }}" |
− | **<code><nowiki>{{if||x| p | q }}</nowiki></code> gives "{{if||x| p | q }}"
| + | *<code><nowiki>{{ifnotempty|| p | q }}</nowiki></code> gives "{{ifnotempty|| p | q }}" |
− | **<code><nowiki>{{if||| p | q }}</nowiki></code> gives "{{if||| p | q }}"
| |
− | **<code><nowiki>{{if|expr|2<3| p | q }}</nowiki></code> gives "{{if|expr|2<3| p | q }}"
| |
− | **<code><nowiki>{{if|expr|2>3| p | q }}</nowiki></code> gives "{{if|expr|2>3| p | q }}"
| |
− | **<code><nowiki>{{if|expr|2{{=}}3| p | q }}</nowiki></code> gives "{{if|expr|2{{=}}3| p | q }}"
| |
− | **<code><nowiki>{{if|expr||2=2=3| p | q }}</nowiki></code> gives "{{if|expr||2=2=33| p | q }}"
| |
− | **<code><nowiki>{{if|exist| Help:Link | p | q }}</nowiki></code> gives "{{if|exist| Help:Link | p | q }}"
| |
− | **<code><nowiki>{{if|exist| Hulp:Link | p | q }}</nowiki></code> gives "{{if|exist| Hulp:Link | p | q }}"
| |
− | **<code><nowiki>{{if|error|<span class{{=}}"error">x</span>| p | q }}</nowiki></code> gives "{{if|error|<span class{{=}}"error">x</span>| p | q }}"
| |
− | **<code><nowiki>{{if|error| 7 | p | q }}</nowiki></code> gives "{{if|error| 7 | p | q }}"
| |
− | **<code><nowiki>{{if|error| 7 | p | }}</nowiki></code> gives "{{if|error| 7 | p | }}"
| |
− | **<code><nowiki>{{if|error| 7 | p |}}</nowiki></code> gives "{{if|error| 7 | p |}}"
| |
− | **<code><nowiki>{{if|error| 7 | p }}</nowiki></code> gives "{{if|error| 7 | p }}"
| |
− | * 5 parameters:
| |
− | **<code><nowiki>{{if|eq| u |u| p | q }}</nowiki></code> gives "{{if|eq| u |u| p | q }}"
| |
− | **<code><nowiki>{{if|eq| u |v| p | q }}</nowiki></code> gives "{{if|eq| u |v| p | q }}"
| |
− | | |
| Compare: | | Compare: |
− | * 3 parameters:
| + | *<code><nowiki>{{#if:x| p | q }}</nowiki></code> gives "{{#if:x| p | q }}" |
− | **<code><nowiki>{{#if:x| p | q }}</nowiki></code> gives "{{#if:x| p | q }}"
| |
− | **<code><nowiki>{{#ifexpr:2<3| p | q }}</nowiki></code> gives "{{#ifexpr:2<3| p | q }}"
| |
− | **<code><nowiki>{{#ifexist: Help:Link | p | q }}</nowiki></code> gives "{{#ifexist: Help:Link | p | q }}"
| |
− | **<code><nowiki>{{#iferror:<span class="error">x</span>| p | q }}</nowiki></code> gives "{{#iferror:<span class="error">x</span>| p | q }}"
| |
− | **<code><nowiki>{{#iferror: 7 | p | q }}</nowiki></code> gives "{{#iferror: 7 | p | q }}"
| |
− | **<code><nowiki>{{#iferror: 7 | p | }}</nowiki></code> gives "{{#iferror: 7 | p | }}"
| |
− | **<code><nowiki>{{#iferror: 7 | p |}}</nowiki></code> gives "{{#iferror: 7 | p |}}"
| |
− | **<code><nowiki>{{#iferror: 7 | p }}</nowiki></code> gives "{{#iferror: 7 | p }}"
| |
− | * 4 parameters:
| |
− | **<code><nowiki>{{#ifeq: u |u| p | q }}</nowiki></code> gives "{{#ifeq: u |u| p | q }}"
| |
− | | |
| Note that, unlike parser functions, templates require writing equals signs in values of unnamed parameters as <code><nowiki>{{=}}</nowiki></code> | | Note that, unlike parser functions, templates require writing equals signs in values of unnamed parameters as <code><nowiki>{{=}}</nowiki></code> |
| | | |
| For full substitution, simply use {{cnw|subst:}} or {{cnw|safesubst:}}. If the condition contains a parser function, template, or variable, that should be substituted too. Optionally the "then" or "else" part can also be substituted. | | For full substitution, simply use {{cnw|subst:}} or {{cnw|safesubst:}}. If the condition contains a parser function, template, or variable, that should be substituted too. Optionally the "then" or "else" part can also be substituted. |
− |
| |
− | Error messages (examples):
| |
− |
| |
− | *<code><nowiki>{{if|expr|1234>e3|1|0}}</nowiki></code> gives {{if|expr|1234>e3|1|0}}
| |
− | *<code><nowiki>{{#ifexpr:1234>e3|1|0}}</nowiki></code> gives {{#ifexpr:1234>e3|1|0}}
| |
| | | |
| ==Expansion depth limit== | | ==Expansion depth limit== |
Line 69: |
Line 37: |
| | | |
| Condition: string not empty. | | Condition: string not empty. |
− |
| |
− | ===#ifexist:===
| |
− |
| |
− | Condition: page [[Help:Page existence|exists]] (applies also to special pages).
| |
− |
| |
− | The usual case-sensitivity applies: if a page exists then also a non-canonical name for that page gives a positive result.
| |
− |
| |
− | [[Template:Exists]] gives the same result, except that the result is positive for an interwiki link. You can also handle an interwiki link differently with [[Template:If interwiki link]].
| |
− |
| |
− | The page A checking existence of page B is listed on Special:Whatlinkshere/B as a page which links to B.
| |
− |
| |
− | On Wikimedia wikis there is a maximum for the number of distinct pages for which #ifexist is called on a page. A call of #ifexist after a transclusion of the same page does not require an extra database query and is therefore not counted. A call beyond the maximum returns "false". The html-source of each page shows the counted number of calls, as well as the maximum. The maximum is currently 500, see [[w:Wikipedia:Template limits#Expensive parser function calls]].
| |
− |
| |
− | ===#ifexpr:===
| |
− | Condition: non-zero.<ref>[http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/ParserFunctions/Expr.php?view=markup Expr.php]</ref>
| |
− |
| |
− | Empty gives false. Other strings which are not correct numerical or Boolean expressions give an error message<ref>[http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/ParserFunctions/ParserFunctions.i18n.php?view=markup ParserFunctions.i18n.php]</ref>:
| |
− | <pre>
| |
− | 16 'pfunc_expr_stack_exhausted' => 'Expression error: Stack exhausted',
| |
− | 17 'pfunc_expr_unexpected_number' => 'Expression error: Unexpected number',
| |
− | 18 'pfunc_expr_preg_match_failure' => 'Expression error: Unexpected preg_match failure',
| |
− | 19 'pfunc_expr_unrecognised_word' => 'Expression error: Unrecognised word "$1"',
| |
− | 20 'pfunc_expr_unexpected_operator' => 'Expression error: Unexpected $1 operator',
| |
− | 21 'pfunc_expr_missing_operand' => 'Expression error: Missing operand for $1',
| |
− | 22 'pfunc_expr_unexpected_closing_bracket' => 'Expression error: Unexpected closing bracket',
| |
− | 23 'pfunc_expr_unrecognised_punctuation' => 'Expression error: Unrecognised punctuation character "$1"',
| |
− | 24 'pfunc_expr_unclosed_bracket' => 'Expression error: Unclosed bracket',
| |
− | 25 'pfunc_expr_division_by_zero' => 'Division by zero',
| |
− | 26 'pfunc_expr_invalid_argument' => 'Invalid argument for $1: < -1 or > 1',
| |
− | 27 'pfunc_expr_invalid_argument_ln' => 'Invalid argument for ln: <= 0',
| |
− | 28 'pfunc_expr_unknown_error' => 'Expression error: Unknown error ($1)',
| |
− | 29 'pfunc_expr_not_a_number' => 'In $1: result is not a number',
| |
− | </pre>
| |
− |
| |
− | ===#iferror:===
| |
− |
| |
− | Condition: contains <code>class="error"</code> as attribute of <code><nowiki><strong></nowiki></code>, <code><nowiki><span></nowiki></code>, <code><nowiki><p></nowiki></code>, or <code><nowiki><div></nowiki></code> tags.<ref>[http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/ParserFunctions/ParserFunctions_body.php?view=markup ParserFunctions_body.php]</ref>
| |
− |
| |
− | These are generated by #expr, #ifexpr, #time, #rel2abs, some other MediaWiki situations (such as recursive depth and template loop checks), and this template.
| |
− |
| |
− | If the error condition does not apply and there is no "else" part, the function gives the input wikitext.
| |
− |
| |
− | ===#ifeq:===
| |
− | Condition: equal as strings (case-sensitive) or numbers.<ref>#ifeq: uses the PHP comparison operator ==.[http://www.php.net/manual/en/language.operators.comparison.php]</ref>
| |
− |
| |
− | *<code><nowiki>{{if|eq| 1e3 | 1000 | 1 | 0 }}</nowiki></code> gives "{{if|eq| 1e3 | 1000 | 1 | 0 }}".
| |
− | *<code><nowiki>{{#ifeq: 1e3 | 1000 | 1 | 0 }}</nowiki></code> gives "{{#ifeq: 1e3 | 1000 | 1 | 0 }}".
| |
− |
| |
− | To force a string-based comparison, add a non-numerical character to both compared arguments.
| |
− |
| |
− | *<code><nowiki>{{if|eq| x1e3 | x1000 | 1 | 0 }}</nowiki></code> gives "{{if|eq| x1e3 | x1000 | 1 | 0 }}".
| |
− | *<code><nowiki>{{#ifeq: x1e3 | x1000 | 1 | 0 }}</nowiki></code> gives "{{#ifeq: x1e3 | x1000 | 1 | 0 }}".
| |
− |
| |
− | If desired, trim the arguments before adding this non-numerical character, for example with <code><nowiki>{{#if:x|..}}</nowiki></code>.
| |
− |
| |
− | Text between <code><nowiki></code> tags is temporarily replaced by a unique code. This affects comparisons:
| |
− |
| |
− | *<code><nowiki>{{if|eq|<nowiki>abc</nowiki> | <nowiki>abc</nowiki> | 1 | 0 }}</nowiki></code> gives "{{if|eq|<nowiki>abc</nowiki> | <nowiki>abc</nowiki> | 1 | 0 }}".
| |
− | *<code><nowiki>{{#ifeq:<nowiki>abc</nowiki> | <nowiki>abc</nowiki> | 1 | 0 }}</nowiki></code> gives "{{#ifeq:<nowiki>abc</nowiki> | <nowiki>abc</nowiki> | 1 | 0 }}".
| |
| | | |
| ==See also== | | ==See also== |
− | *[[Template:Sw]] | + | *[[Template:If]] |
− | *[[Template:Iflenge]]
| |
− | *[[w:Template:If]]
| |
| {{refs}} | | {{refs}} |
| | | |
| <div style="clear:both;" /></div></div></noinclude> | | <div style="clear:both;" /></div></div></noinclude> |