ゴムペディア:条件文
この文書は、テンプレート等における条件文についてのMediaWiki拡張機能を説明する文書です。条件文はすべて次のような文法を持っています。
- {{#機能名: 引数 1 | 引数 2 | 引数 3...}}
各機能
このモジュールには現在、expr、if、ifeq、ifexist、ifexpr、switch、TIMEの7つの機能が定義されています。
if
if機能は、もし〜ならば〜、さもなくば〜の構文です。文法は、
{{ #if: <条件> | <ならば文> | <さもなくば文> }}
もし 条件 が空文字列もしくはホワイトスペースのみであったならば、条件は偽と判断され、さもなくば文 が返されます。そうでなければ ならば文 が返されます。 ならば文 は省略できます。その場合には、条件が偽であるときに空文字列が返されます。
例:
{{テンプレート|引数=なにがし}} {{テンプレート}} {{テンプレート|引数=}} | | | | | | | | | {{ #if: {{{引数|}}} | 引数が定義されている場合 | 引数が定義されていない場合、空の場合 }}
if機能では、等号その他の数学的な演算は一切サポートされていないことに注意してください。たとえば、{{#if: 1 = 2|はい|いいえ}}は、「はい」を返します。なぜなら、"1 = 2"は空文字列でないからです。これは「もし定義されていたら」という構文が意図されています。もし、文字列を比較するのならば、ifeqを使ってください。また、数字を比較するのなら、ifexprを使ってください。
ifeq
ifeqは2つの文字列を比較し、比較の結果に応じて異なる文字列を返します。文法は、
{{ #ifeq: <比較文字列 1> | <比較文字列 2> | <等しいときに返す文> | <等しくないときに返す文> }}
ifexist
ifexistは、指定されたタイトルのページが存在するかどうかによって、2つのうちの1つの結果を返します。
{{ #ifexist: <検索ページ名> | <ページのあるときに返す文> | <ページのないときに返す文> }}
例えば、
- Fooは存在しないので、
{{#ifexist:Foo|Bar|RFC 3092}}
は RFC 3092 を返します。 {{#ifexist:Wikipedia:条件文|はい|いいえ}}
は いいえ を返します。- m:Help:Calculationは存在しますが、これは接頭辞がinterwikiなので、
{{#ifexist:m:Help:Calculation|はい|おっと}}
は おっと を返します。
1つ目のパラメータは、調べたいページのタイトルです。2つ目は存在している場合に返す文、3つ目は存在しない場合に返す文です。入力されるパラメータが有効なタイトルでなければ、存在しない場合の文が返されます。
Template:Exists(Meta) は、Interwikiリンクでも「存在する」文を返すこと以外は、同じ結果を返します。Template:if interwiki link(Meta)は、この違いを利用しています。
switch
switch
は、ひとつの値(基準値)を他の複数の値と比較し、一致するものが見つかったら該当の値を返します。文法は基本的に、
{{ #switch: <基準値> | <値1> = <返す文1> | <値2> = <返す文2> | ... | <値n> = <返す文n> | <その他の時に返す文> }}
switch
はそれぞれの値を、基準値と一致するものがみつかるまでそれぞれの値をずっと探そうとします。もし見つかったら、値に相当する文(等号のあとにある文)を返します。もし見つからなかったら、最後の等号のない項を返します。もし、この項にどうしても等号を含めて書く必要がある場合には、#default
を用います。
{{ #switch: <基準値> | <値> = <返す文> | #default = <その他の時に返す文> }}
同じ返す文を何度も書くのを省略するため、値が「通り抜ける」構造になっていることに気をつけてください。たとえば、
{{ #switch: <基準値> | <値1> | <値2> | <値3> = <返す文3> | ... | <値n> = <返す文n> | <その他の時に返す文> }}
この例では、値1と値2に等号が付いていません。もしそれらに一致したら、返す文3が返されます。つまり、等号を省略した場合には、次の最初の等号の後の文が返されるのです。
expr
expr機能は、数式の演算を行います。文法は、
{{ #expr: 数式 }}
サポートしている演算子(おおむね優先順位の順)は、
演算子 演算 例 * 乗算 {{#expr: 30 * 7}} = 210 / または div 除算 {{#expr: 30 / 7}} = 4.2857142857143 + 加算 {{#expr: 30 + 7}} = 37 - 減算、負号 {{#expr: 30 - 7}} = 23 mod 乗除、除算の「あまり」 {{#expr: 30 mod 7}} = 2 round 四捨五入 round
の右に小数点以下の桁数を入れる{{#expr: 30 / 7 round 7}} = 4.2857143 = 等号 {{#expr: 30 = 7}} = 0 <> または != 不等号 {{#expr: 30 <> 7}} = 1 < 小なり {{#expr: 30 < 7}} = 0 > 大なり {{#expr: 30 > 7}} = 1 <= 左は右以下 {{#expr: 30 <= 7}} = 0 >= 左は右以上 {{#expr: 30 >= 7}} = 1 and 論理積 {{#expr: 30 and 7}} = 1 or 論理和 {{#expr: 30 or 7}} = 1 not 否定 {{#expr: not 7}} = 0 ( ) 優先 {{#expr: (30 + 7) * 7 }} = 259
真偽を求める演算子は、偽の時に0を、真の時に1を返します。十進法で計算され、小数点は、"." です。FORTRANスタイルの科学技術計算はサポートされていません。
たとえば、
{{ #expr: (100 - 32) / 9 * 5 round 0 }}
は、
38
を返します。これは、華氏温度を摂氏温度に変換し、整数に四捨五入します。
ifexpr
ifexprは、数式を評価し、その結果に従って2つの文字列からひとつを返します。
{{ #ifexpr: <数式> | <ならば文> | <さもなくば文> }}
数式の結果が0であった場合には さもなくば文 が返され、そのほかの場合には ならば文 が返されます。数式の文法はexprと同じです。
time
time
は、日付や時間のフォーマットをする機能です。文法は
{{ #time: フォーマット }}
または
{{ #time: フォーマット | 日時/時間 }}
のどちらかです。
日時が指定されていない場合には、コードがHTMLに変換された時刻が用いられます。ページのキャッシュに注意してください。記事が閲覧される時間と、1週間までくらいの誤差が出るかもしれません。最新にするには、その都度更新する必要があるでしょう。なにも変更しないで投稿し直す(いわゆるゼロ編集)、action=purge
をURLのオプションに付ける、閲覧者のオプションで「ページをキャッシュしない」にする、などで更新できます。
引数 フォーマット
は、PHPの date に使われるのと同様です。
以下の フォーマット
コードは、PHPにおけるのと同じ意味を持っています。国際化(つまり、言語と地域による相違)を別にすれば、PHPでのふるまいとの重要な相違点は、条件文のエラーと考えられるべきで、報告されるべきです。すべての数値のフォーマットのコードはその言語に従ってフォーマットされます。もし、そうしたくないときには、xn
を前に付けてください。
コード | 説明 | 出力例 |
---|---|---|
d | 日。ひと桁の時は0が前に付く。 | 04 |
D | 曜日の短縮形。まれに国際化されている。 | 月 |
j | 日。ひと桁の時も0が前に付かない。 | 4 |
l | 曜日。まれに国際化されている。 | 月曜日 |
F | 月。たいていは国際化されている。 | 9月 |
m | 月の数字。ひと桁の時は0が前に付く。 | 01 から 12 |
M | 月の短縮形。たいていは国際化されている。 | 9月 |
n | 月の数字。ひと桁の時も0が前に付かない。 | 1 から 12 |
Y | 4桁の西暦年。 | 2006 |
y | 2桁の西暦年 | 06 |
H | 24時間制の時刻。ひと桁の時は0が前に付く。 | 00 から 23 |
i | 分。ひと桁の時は0が前に付く。 | 00 から 59 |
s | 秒。ひと桁の時は0が前に付く。 | 00 から 59 |
以下の フォーマット
コードは、PHPの文法の拡張です。
コード | 説明 |
---|---|
xn | 数字を返すコードの前に置いて、それが半角数字となるようにする。例えば、ヒンディー語において、{{ #time:H, xnH | 06:00}} はヒンディー語式の ०६ ではなく 06 を返す。
|
xr | 数字を返すコードの前に置いて、それがローマ数字となるようにする。{{ #time:xrH | 06:30}} は VI を返す。 |
xg | 月の名前を返すコードの前に置いて、主格と所有格に違いのある言語においては、それが所有格となるようにする。 |
xx | 文字の「x」そのもの。 |
上記以外の文字は、そのまま出力されます。また、上記の文字をそのまま文字として出力する2つの方法があります。
- ダブルクオート ( " ) に囲まれた文字は、そのまま出力されます。このとき、ダブルクオートそのものは出力されません。ダブルクオートが奇数の時、最後のダブルクオートはそのまま出力されます。
{{ #time: Fには雪が"1m積もった。" |2006-02-12}}
→ 2月には雪が1m積もった。{{ #time:i's" |0:20:11}}
→ 20'11"
- PHPのdate()同様、バックスラッシュ "\" は次の文字をエスケープします。
\H
は文字 H を出力し、\"
は文字 " を出力します。
この機能の利用者からの希望により、フォーマット コードは今後追加される可能性があります。PHPのフォーマットコードのより完全な実装と、拡張された x
コードの両方です。
引数 日時/時間
は、PHPの strtotime() で使われているのと全く同じです。それは December 11
や 2006-12-11
のような絶対的な日付、時刻と、時差やタイムゾーンの計算に便利な +10 hours
(本当は +1000
という書き方ができるはずですが、2006年9月8日現在、プラスとマイナスが逆になってしまいます)のような相対的な日数、時間の両方をサポートしています。より詳しくはthe GNU tar manualをご覧ください。
例
{{#time:Y年Fj日|-14 days}}
→ 2024年11月10日(14日前){{#time:H:i|+9 hours}}
→ 05:06 (日本時間){{#time:H:i|8:15 +6 hours}}
→ 14:15
subst
subst
を条件文で用いたい場合には、"subst:
"と"
#
"の間に空白を入れないでください。m:ヘルプ:テンプレート#substも参照してください。
表
現在のところ、wikiのパイプを使った表の文法は、条件文の内部では使えません。次善策としては、
- 「{{!}}」を使って、条件文からパイプを隠す。
- htmlタグスタイルの文法を代わりに使う。
インストール
自分のメディアウィキにこの条件文をインストールするには、次の両方のファイルをダウンロードし、extensionsの中に ParserFunctions というディレクトリを作って、おいてください。
次に、LocalSettings.phpの最後に次の行を足します。
require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );
コードツリーを次の場所で見ることができます。
使用例
- n:ウィキニュース:Template メッセージの一覧/日付#日付計算用 - 日付計算用のテンプレート数例
外部リンク
de:Hilfe:Template-Programmierung
en:m:ParserFunctions
fr:Aide:Fonctions parseur
it:Aiuto:ParserFunctions
nl:Help:ParsFuncties
pl:Wikipedia:Funkcje parsera
ru:Википедия:Функции парсера
vi:Trợ giúp:Tính toán
zh:help:模板扩展语法