Template‐ノート:If defined call1

最新のコメント:18 年前 | トピック:英語版での使用禁止について | 投稿者:Marsian

他の言語版におけるこのテンプレート:
en fr zh

使用法 編集

{{If defined call1|condition|target template|parameter 1}}

最初のパラメータ("condition"のところ)に何らかの文字や数値を書くと、第2パラメータ("target template"のところ)にあるテンプレートを呼び出し、そのテンプレートへ第3パラメータ("parameter 1"のところ)を引き渡します。

最初のパラメータのところに何も書かないと、このテンプレート自体が現れません(Template:void という、中身が空のテンプレートを呼び出します)。

目的のテンプレートに2つのパラメータを渡したいときは Template:If defined call2、3つのときは Template:If defined call3 を使用します。

応用 編集

If defined call1 をテンプレ(甲)の中で使用して、甲のパラメーター (A) の値の有無によって、テンプレ(乙)を呼び出すか否かを変えるには、以下のようにします。

{{If defined call1 | {{{A}}} | 乙 | 乙に渡すパラメータ }}
  • 甲の中で、"A=○○" となっていれば、テンプレ乙を呼び出します。
  • 甲の中で、"A=" となっていれば、テンプレ乙を呼び出しません。
  • 甲の中で、"A=" という文字列も省略した場合は、テンプレ乙を呼び出して、"{{{A}}}"という文字列をそのまま乙に渡します。Template:甲 自体を表示させた場合は、この状態になっています("A="が甲に渡されていないので)。このパラメータの項目名を省略した場合にも、テンプレ乙を呼び出さないようにするには、パラメータ項目名(A) と "}}}" の間に パイプ ( | ) を挿入します。
{{If defined call1 | {{{A|}}} | 乙 | 乙に渡すパラメータ }}

これで、Template:甲 自体を表示させた場合にも、乙が呼び出されていないことが確認できます。

質疑 編集

第一パラメータと第三パラメータは必ず同じですか?―219.173.119.57 2005年11月8日 (火) 15:42 (UTC)返信
同じとは限らないです。同じになることが多いとは思いますが。--oxhop 2005年11月8日 (火) 16:15 (UTC)返信
同じとわかっている場合,入力が二度手間になりますよね.en:Template:If non-empty call1 だと一度で良い(たぶん)ので,これも輸入というか,作りましょうか.{{{3}}}を{{{1}}}にするだけですが.(関連: User:Marsian/10#If defined call1 を解剖する. - Marsian / talk 2005年11月10日 (木) 17:27 (UTC)返信
利用者:Marsian/10 ←このページいいですね。先が楽しみです。"target template" のところ、"Template:" をつけても同じ動きをすると思いますよ。ぜひ試してみてください。テンプレは、使えそうだと思ったら、どんどん輸入してくださいな。--oxhop 2005年11月11日 (金) 14:33 (UTC)返信

英語版での使用禁止について 編集

サーバへの負荷が高すぎるようで英語版では基本的に使用禁止になったようです。en:Project:Avoid using meta-templates--Suisui 2005年12月30日 (金) 10:56 (UTC)返信

見ました.えーと,まだ調査中なんですが,よく見ると11月下旬から12月上旬に掛けて色々激動があったようで,if系も中身が結構変わったりしてるようです.
  • このテンプレートに関して言えば,en:のen:If defined call1はtemplate artistのen:User:AzaTothによってen:Template:If definedというメタテンプレートを使う形に変わった状態で保護されています.まだ中身を解読してませんが,たぶんこれに変えた方が「まし」なのでしょう(たしかcallする階数が一段階減るんだったかな……)
  • Kahusiさんが2005-12-05版のen:Template:If definedから移入したTemplate:If definedがそれで,これは保護はされていますがif系で唯一(?)deprecatedの表示がありません.たぶんこれがもうちょっと「まし」ということでしょうが,実際じゃあこれの使用は推奨するのかというと,やっぱりメタテンプレートに違いはないのであまり良くはないのだと思います(Templateをcallする階数がコレ系では一番少ないのかな?).
  • en:Template:Qifというのが一時的にifの代替として大量に使用されているようですが,これも既に非推奨がほぼ確定していて,使わない方がいいということになっているようです.
  • Template:コンピュータゲームen:Template:Infobox CVGを昔移入したものですが,en:ではif defined call1の使用は止めて,ずいぶん中身は変わっています.これもたぶんコッチの方がいいんでしょう.
  • いまたぶん最もhotなのものの1つはen:Template:Infobox TV channelで,メタテンプレートを使わないで何とかしようとしてるみたいです.CSSのclass=hiddenStructureてのを使ってるみたいです.
  • 最終的にはMediaWiki自体にifとかの機能を組み込めばいいじゃんって話もあるようです.
ja:ではif系はまだそれほど使ってないと思いますが,とりあえず,行動のオプションとしてはこんなところでしょうか:
  1. これ以上使うのは見合わせる - 使ってるプロジェクトやユーザに知らせる
  2. 実際どれくらい使ってるのかを調べる - 実際,ついさっきまでKahisiさんがTemplate:If definedを移入していたことに気付いてませんでした.ほかにもメタテンプレート関連のものがあるかもしれないですし,全部のメタテンプレート関連の使用状況を洗い出した方がいいかもしれません (en:Wikipedia:High-risk templates)
  3. ものによっては保護を検討する(?) - ja:でもすべきかどうかはわかりませんが,en:ではこんな感じ (en:Wikipedia:List of permanently protected pages#High use templates) になってます.
  4. en:Wikipedia:Avoid using meta-templates, en:Wikipedia:High-risk templates あたりを訳す
雑ですがとりあえず. - Marsian / talk 2005年12月31日 (土) 06:27 (UTC)返信

追加報告:

少なくとも2種類の代替手段があるようです (WT:AUM#Comparison CSS trick/Weeble code via en:Template_talk:Infobox_TV_channel)
  1. CSSのhiddenStructureクラスを使うもの.簡単に言うと「class="hiddenStructure{{{1|}}}"」とクラス指定の内側に引数を入れちゃうという.で,このhiddenStructureクラスは display:none をしています (en:MediaWiki:Common.css).ただ,これは飽くまで見えなくするだけであって,たとえばウィキリンクの内側にspanでhiddenStructureしてもうまくいかなかったりするようですし, speak:none も追加しないと読み上げされてしまう(これは対応されそうな予感),という話も出ています.そもそもスタイルシートで文書構造をコントロールするのはどうなんだ(ミラーサイトにもスタイルシートが必要だし,ユーザがcommon.cssを切っても変になる),といった議論もなされています (WT:AUM#Accessiblty concerns with css class hiddenStructure)
  2. Weeble-code by MrWeeble. 上記のようなCSSで起きる問題を解消できる (en:Template_talk:Infobox_TV_channel#WeebleCodeにはTaxoboxでの問題が話題になっている) ようですが,呼び出すたびにダミーパラメタを設定せねばならないことと,(dummy=の中身は書く必要はありませんでした)テーブルの場合は,タグを少なくとも一個所は<td>と書かねばならない(っぽい)ことなど,記述がやや煩雑なのがネックなようです.
いずれも,(1.6になって導入された?) パラメタのデフォルト値をうまく使ってるようです(パイプの右がデフォルトで,空欄にしといて普段はヴォイドを代入,とか,なんとか……m:Help:Parameter default参照)
User:MarsianのSub pagesの2 - 7あたりで試作したりしてます.コメントなどあればどうぞ. - Marsian / talk 2006年1月1日 (日) 16:54 (UTC) いろいろ変更 - 2006年1月4日 (水) 01:38 (UTC) さらに訂正.サブページはしょっちゅういじくるのでリンク除去.どうもWeebleで良さそうな感じ…… - 2006年1月6日 (金) 08:39 (UTC)返信

ja:にある論理テンプレートだけでもリスト化しましょうか.(やるとしてもカテゴリのがいいと思う)もっとも,ja:ではen:に比べたらほとんど使ってないに等しいので焦ることはないとは思いますが……(本当にヤバかったら管理者の方が保護してるだろうし).先ほどふとTemplate:ifで検索したらヒットして,長安さん(履歴)がfootnote系を移入されようとして,ifを含めいくつかの論理テンプレートを移入していたと知りました.そこで,いちおう,こういう話になってるみたいです,と呼びかけてきました.

あと,さっき英語版を見たらen:Template:ifが削除されてました.日本語版でも利用が拡大する前に何らかのポリシーかガイドラインを決めておいた方がいいのではないかと思います.あるいは,利用なんて拡大しない → 対策なんて要らない,かもしれませんが…… - Marsian / talk 2006年1月6日 (金) 13:15 (UTC)返信

qifはTfDでとりあえずkeepになりました (TfD log).CSSへの置き換えが進んでいるようですが,アクセシビリティへの懸念も噴出しています (en:MediaWiki talk:Common.css#CSS hack reduces accessibility)
いつまで追えるかわからないので,とりあえずquick links置いときます:
後者は適当に作ったまとめ的リンク集です.編集はご自由に.en:User talk:Mzajac#Shooting of qif due to WP:AUM の最初のAdrianのコメントが現状をうまくまとめていてわかりやすかったです. - Marsian / talk 2006年1月17日 (火) 07:00 (UTC)返信

Brion shock 編集

えー,cproさんの会話ページにも少し書きましたが,en:WP:AUMで開発者のBrionが「開発者がサーバの負荷が増大すると言ってる,というのを理由にしないでくれ」「Jamesday(元々の発言をした開発者)はどう言ってるか知らないが,私はサーバ負荷が増大するという事実は確認していない」(大意)というような発言をして,どうなるか読めなくなってきました(うーん,ifがTfD通って実際に消されてさらにqifもTfDにかけられて,それで今になって言うってのはどうなんだろう……だったらもっと早く言ってくれ,という気が個人的にはしないでもないんですが.そりゃAdrianも"Now, could you please guide us?"とか言いたくなるよと)en:VPT#Questions re server load from images in userspaceも参照. - Marsian / talk 2006年1月21日 (土) 15:19 (UTC)返信

使用例 編集

  • Template:MMA statsbox - 総合格闘家の人物記事に使用。
    • 画像を指定しない場合は、画像の欄を表示させない。
    • 存命中である人物の場合は、命日の値を空白にしておくことで、命日の欄を表示させない。
  • Template:Battlebox - 戦闘の記事に使用。
    • 画像を指定しない場合は、画像の欄を表示させない。
    • Campaign box(同一戦役の戦闘リスト)が存在しない場合は、それ用の欄を表示させない。
ページ「If defined call1」に戻る。