利用者:Mizusumashi/ラッパーテンプレートのガイドライン
この文書は、ラッパー・テンプレート作成のガイドラインを提供するために書かれました。
定義
[編集]ラッパー・テンプレートとは、あるテンプレートの機能をほとんどそのまま利用しつつ、機能を追加したり、パラメータをあらかじめ固定するなどの目的で、そのテンプレートを内部的に呼び出しているテンプレートです。
奨励するラッパー・テンプレートの書き方
[編集]次のようなテンプレートがある場合:
このガイドラインでは、つぎのようにテンプレートを記述することを奨励します:
奨励しないラッパー・テンプレートの書き方
[編集]単純なラッパー・テンプレート
[編集]次のような、単純なラッパー・テンプレートの書き方は奨励できません:
パラメータを指定した場合
[編集]この書き方でも全てのパラメータを指定した場合には、ベースのテンプレートと同じ動作をします:
{{/ベース・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}} {{/単純なラッパー・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “値1” |
2 | (void) | “値2” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “値4” |
名前つき2 | (void) | “値5” |
名前つき3 | デフォルト値 | “値6” |
title | ベーステンプレート | “ベーステンプレート” |
単純なラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “値1” |
2 | (void) | “値2” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “値4” |
名前つき2 | (void) | “値5” |
名前つき3 | デフォルト値 | “値6” |
title | ベーステンプレート | “単純なラッパー・テンプレート” |
パラメータを指定しない場合 - 問題点
[編集]しかし、パラメータを指定しない限り、ベースのテンプレートのデフォルト値の指定を完全に無視することになります:
{{/ベース・テンプレート}} {{/単純なラッパー・テンプレート}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “{{{1}}}” |
2 | (void) | “” |
3 | デフォルト値 | “デフォルト値” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ベーステンプレート” |
単純なラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “{{{1}}}” |
2 | (void) | “{{{2}}}” |
3 | デフォルト値 | “{{{3}}}” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “{{{名前つき2}}}” |
名前つき3 | デフォルト値 | “{{{名前つき3}}}” |
title | ベーステンプレート | “単純なラッパー・テンプレート” |
引数指定全体を条件文で囲ったラッパー・テンプレート
[編集]次のような、引数指定全体を条件文で囲ったラッパー・テンプレートの書き方は奨励できません:
パラメータを指定した場合
[編集]この書き方でも全てのパラメータを指定した場合には、ベースのテンプレートと同じ動作をします:
{{/ベース・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}} {{/引数指定全体を条件文で囲ったラッパー・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “値1” |
2 | (void) | “値2” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “値4” |
名前つき2 | (void) | “値5” |
名前つき3 | デフォルト値 | “値6” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “値1” |
2 | (void) | “値2” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート” |
パラメータを指定しない場合 - 問題点1
[編集]しかし、名前のないパラメータに関しては、パラメータを指定しない限り、ベースのテンプレートのデフォルト値の指定を無視することになります:
{{/ベース・テンプレート}} {{/引数指定全体を条件文で囲ったラッパー・テンプレート}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “{{{1}}}” |
2 | (void) | “” |
3 | デフォルト値 | “デフォルト値” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “” |
2 | (void) | “” |
3 | デフォルト値 | “” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート” |
デフォルト値のキャンセル - 問題点2
[編集]名前つきのパラメータに関しても、「パラメータ=」と明示的にパラメータの空にすることで、デフォルト値をキャンセルすることができません:
{{/ベース・テンプレート|名前つき3=}} {{/引数指定全体を条件文で囲ったラッパー・テンプレート|名前つき3=}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “{{{1}}}” |
2 | (void) | “” |
3 | デフォルト値 | “デフォルト値” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “” |
2 | (void) | “” |
3 | デフォルト値 | “” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート” |
デフォルト値を指定したラッパー・テンプレート
[編集]次のような、デフォルト値を指定したラッパー・テンプレートの書き方は奨励できません:
デフォルト値が変更になった場合 - 問題点
[編集]このようにデフォルト値を指定したラッパー・テンプレートは、ベースのテンプレートと動作を全く一致させることができますが、ベースとなるテンプレートのデフォルト値が変更になった場合、その変更に自動的に追従することがないので、保守性に問題があります。
問題を解決しているか
[編集]コード
[編集]では、このガイドラインで奨励しているラッパー・テンプレートの書き方は、問題を解決しているのでしょうか:
- /ラッパー・テンプレート(再掲)
パラメータを指定した場合
[編集]全てのパラメータを指定した場合には、ベースのテンプレートと同じ動作をします:
{{/ベース・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}} {{/ラッパー・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “値1” |
2 | (void) | “値2” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “値4” |
名前つき2 | (void) | “値5” |
名前つき3 | デフォルト値 | “値6” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “値1” |
2 | (void) | “値2” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート” |
パラメータを指定しない場合
[編集]名前つきパラメータ、名前なしパラメータの区別なく、ベースとなるテンプレートの全てのデフォルト値を反映します:
{{/ベース・テンプレート}} {{/ラッパー・テンプレート}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “{{{1}}}” |
2 | (void) | “” |
3 | デフォルト値 | “デフォルト値” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “!"#$% =” |
2 | (void) | “!"#$% =” |
3 | デフォルト値 | “!"#$% =” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート” |
デフォルト値のキャンセル
[編集]最後に、「パラメータ=」と明示的にパラメータの値を空にすることで、デフォルト値をキャンセルすることができます:
{{/ベース・テンプレート|名前つき3=}} {{/ラッパー・テンプレート|名前つき3=}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “{{{1}}}” |
2 | (void) | “” |
3 | デフォルト値 | “デフォルト値” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “!"#$% =” |
2 | (void) | “!"#$% =” |
3 | デフォルト値 | “!"#$% =” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート” |
デフォルト値が変更になった場合
[編集]まず、ラッパー・テンプレート内でデフォルト値を指定していないので、ベースとなるテンプレートのデフォルト値が変更になった場合、その変更に自動的に追従することができます。しかし、保守性の点からいって、完全というわけではありません(参照:#パラメータが変更になった場合)。
残された問題
[編集]パラメータが変更になった場合
[編集]ベースとなるテンプレートのパラメータが増えたり、名前が変更されたりした場合、このラッパー・テンプレートは、その変更に追従することができません。これはラッパー・テンプレートを用いている限り解決できない問題です。
しかし、ラッパー・テンプレートとベースとなるテンプレートの解説(ドキュメンテーション)に、情報を加えておくことで、少なくとも注意を促がすことはできるでしょう。
空白や改行の処理
[編集]無名パラメータの場合、/ラッパー・テンプレートでは、つぎのように空白や改行の処理に違いが出ます。
{{/ベース・テンプレート| 値1 | 値2 |値3|}} {{/ラッパー・テンプレート| 値1 | 値2 |値3|}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “ 値1 ” |
2 | (void) | “
値2 ” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “値1” |
2 | (void) | “値2” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート” |
これは、条件文を使用していることに起因する現象です。
次のコードを代わりに使うことによって、表面上、空白や改行の処理を一致させることができます:
{{/ベース・テンプレート| 値1 | 値2 |値3|}} {{/ラッパー・テンプレート2| 値1 | 値2 |値3|}}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “ 値1 ” |
2 | (void) | “
値2 ” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート2 | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “ 値1 ” |
2 | (void) | “
値2 ” |
3 | デフォルト値 | “値3” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート2” |
/ラッパー・テンプレート2は、テンプレート展開途中で、「{{{1}}}」の値の左右両端に改行や空白文字があれば、「<span />{{{1}}}<span />」と展開するようにします。MediaWikiが表示段階で「<span />」というXHTMLを除去するため、大抵の場合は、見た目にも、最終的に生成されるXHTMLにも変化はありません。しかし、テンプレートの展開途中で、Wikiマークアップに意図しない影響を与える可能性があります。
現在分かっている範囲で、「{{{1}}}」と展開されて意図しない結果が発生するのは、ベースとなるテンプレートが「[[{{{1}}}]]」や「{{ {{{1}}} }}」といったマークアップを使っている場合ですが、そのような場合、そもそも「{{{1}}}」の値の左右両端に改行や空白文字を与えることは考えにくいため、大抵の場合、/ラッパー・テンプレート2で問題ないでしょう。
なお、次のようなコードは、/ラッパー・テンプレート2では「<span />{{{1}}}<span />」と展開されますが、問題ないようです:
{{ /ベース・テンプレート| * 値1-1 * 値1-2 * 値1-3 }} {{/ラッパー・テンプレート2| * 値1-1 * 値1-2 * 値1-3 }}
ベーステンプレート | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “
” |
2 | (void) | “” |
3 | デフォルト値 | “デフォルト値” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ベーステンプレート” |
ラッパー・テンプレート2 | ||
---|---|---|
パラメータ | デフォルト値 | 表示 |
1 | (デフォルト値指定なし) | “
” |
2 | (void) | “!"#$% =” |
3 | デフォルト値 | “!"#$% =” |
名前つき1 | (デフォルト値指定なし) | “{{{名前つき1}}}” |
名前つき2 | (void) | “” |
名前つき3 | デフォルト値 | “デフォルト値” |
title | ベーステンプレート | “ラッパー・テンプレート2” |