技術と趣味の亜空間

主にゲームプログラミングとその周辺に関する記事を不定期で上げていきます

【MediaWiki】ダイナミック・ページ・リスト備忘録

概要

海外のWikiエンジンといえばMediaWiki だが、その機能の1つであるダイナミック・ページ・リストの利用例を備忘録的メモ。

使い方

利用には <DPL></DPL>{{#DPL:}} の2つの実装方法がある。
どちらも基本的には同じようなことができるが、決定的に違うこととして <DPL></DPL>{{PAGENAME}}等のテンプレートを表示フォーマットに埋め込むことができない。

{{#DPL:
|category = Target:{{{1|{{#replace:{{BASEPAGENAME}}|&#38;|and}}}}}
|namespace = Sub
|notcategory = Non Target Page
|allowcachedresults=true
|ordermethod=title
|mode=userformat
|format = ,{{ ²{#ifexist:²{#titleparts:%TITLE%|1|1}²|²{#titleparts:%TITLE%|1|1}²|²{#titleparts:%TITLE%|2|1}²}² ¦param=
²{#switch: %TITLE%
¦FugaFuga/Chapter1 = unique
¦#default = normal
}² }} ,,
|noresultsheader=There is no target.
}}

上記は {{Target List}} みたいな感じでテンプレート化しており、以下のことをしている:

  • Target:<Hogehoge> という名前のSub名前空間に属するカテゴリが設定されているページを全て取得する(ただしNon Target Pageカテゴリがあるページは除く)
    • このテンプレートを呼び出す際に、第一引数を自由に設定できるようにしている
      • 設定されてなければ表示したページの {{BASEPAGENAME}} を取得する
      • {{BASEPAGENAME}}名前空間名と末尾の下位ページの階層を除外したページ名(Help:Title/Foo/BarページではTitle/Fooを返す)
  • &は残念ながらうまくパースができない仕様なので、andに変換している
  • allowcachedresults をオンにすることで取得結果をキャッシュする
    • これをしないとページ読み込みを大幅に遅らせることがある
  • ordermethodでページのタイトル順に並び替え
  • modeで表示フォーマットを自作タイプに指定
  • formatで表示の仕方を設定
    • 「format=全リストの最初,各リストの最初,各リストの最後,全リストの最後」という形式
      • 今回は各リストの最初だけほしかったのでそれ以外は無記述でパス
    • ページの先頭と一致する名前のテンプレートを呼び出している
    • 例)Sub:Hogehoge/Chapter1, Sub:FugaFuga/Chapter1, Sub:Zero/One/Chapter1
    • 名前空間を含まない記事名(%TITLE%)を #titleparts でスラッシュで分割する。このとき、最初のスラッシュ部分が階層ではなく名前の一部である場合も考慮し、#ifexist で名前と一致するか判定し、一致しない場合は分割しないようにしている
      • スラッシュ2つが名前の場合は考慮されていない
    • ページ名と同じ名前のテンプレート内にはパラメータが指定できるようになっている
      • 引数param には {{#switch}} 構文で一致するページ名のページで表示される場合、特殊な設定のテンプレートが適用されるようになっている
    • DPL内のテンプレート in テンプレートする場合 {{}}²{}² に代替する
    • 同様に |¦ に代替する
  • 検索結果0件のときはnoresultsheaderで「There is no target.」と表示するように指定

参考記事

ヘルプ:ダイナミック・ページ・リスト | コミュニティセントラル | Fandom Extension:DynamicPageList3 - MediaWiki