Pagequery プラグイン
互換性のある DokuWiki バージョン
Lemming, Anteater, Rincewind, Angua, Adora Belle, Weatherwax, Binky
ダウンロードとインストール
最重要:プラグインが機能するには PHP 5.3 以上が必要です。 手動でプラグインをインストールする方法についてはプラグインを参照して下さい。
NEWS—2013-10-07:編集ツールバーの新規ボタンから new popup syntax “cheatsheet”。 新規言語:オランダ語。
NEWS—2013-10-06:新規抽出オプション:links
(ページリンク)・backlinks
(ページヘのバックリンク)
filter=
正規表現機能を使用して抽出できるスペース区切りのページIDの一覧です(詳細は下記参照)。
2013-03-27:Weatherwax互換。 グループヘッダーのバグ修正済。
2013-03-08:重要なアップデート
- Adora Belle and PHP 5.4.Adora Belle と PHP 5.4 互換
- display オプション:機能変更。全てのメタデータ/ソート領域をページリンク表示に使用できる。{} 内に領域名を記入する。例:“{name} ({mdate})” は “Page-name (01-Jan-1970)” を生成します。mdate はページの更新日です。
- 新規 layout オプション:table か column を選択
- table:複数列を作成するのに保守的な HTML のテーブルを使用します。
- column:代わりに CSS3カラムレイアウトが使用されます。より新しいブラウザが必要ですが、ウィンドウのサイズ変更の際、より良く動作します。
- いくつかのオプションは判りやすさのために改名しました(下の構文一覧を参照)。
- filter オプションはよりエレガントに日付を処理します。You can filter the list based on dates, before, after, between, using real numeric dates, or even time periods in words (last week, 2 days ago, etc…)
- Many small tweaks, and overall code clean up.
GitHub 上の開発履歴:
- Merge pull request #51 from pacobyte/php7_array_declaration_fix (2018-01-22 10:51)
- Increase compatibility with PHP 7 (2018-01-22 02:37)
- Merge pull request #35 from topical/master (2015-03-19 18:40)
- fix caching (2015-03-19 15:06)
- Update plugin.info.txt (2014-11-18 06:39)
- Merge pull request #33 from sawachan/ja-lang (2014-08-16 09:56)
- Create lang.php (2014-08-04 08:04)
- Merge pull request #32 from gamma/master (2014-07-16 12:06)
- Fix for PHP Strict (2014-07-15 11:55)
- Fix for PHP Strict (2014-07-15 11:55)
PHP5.3 で実行しない場合、旧バージョンを利用できます。オプションはそれほど多くありませんが、それなりに便利です。 このバージョンはこれ以上アップデートされません。
バグや問題を報告は、可能な限り GitHub へお願いします。 できない場合はpagequery 議論やフォーラムへお願いします。 先頭にある指示には従ってください。
概要
プラグイン ページには異なる要望に対応する色々なページ一覧/案内プラグインがあります。 Pagequery は、Wiki ページ一覧に対するまとまったオールインワン方式として、多くの考え方を統一しようとします。名前・タイトル・a-z index、年・月・日、名前空間、作成者。更に迅速です。
表面的には、本当に素晴らしい IndexMenu プラグイン とよく似た役割を果たすように見えるかもしれません。 しかし Pagequery の目的は高尚でも精巧でもありません。 IndexMenuは、名前空間と名前空間内のページを表示するに焦点を合わせています。 多くのオプションで名前空間とファイルのソートし、能動的に目次を案内・操作することが可能です。 Pagequery の目的は、ページ一覧を表示することです。 もちろん、希望すれば名前空間順にソートすることもできます。 しかし、主要な目標はページを検索すること、任意の順序でページ一覧を表示すること、グループ別(A-Z、年、月等)に綺麗に表示するすること、加えて複数列によって空間を最大限に活用することです。 両方を試してみれば、それぞれが「異なったかゆさをかいている」ことがすぐに判ります。
機能
- あらゆるソート順の Wiki の目次を作成:A-Z 順、更新日順、作成日順、作成者順、start pages
- Wiki 内の全ページを検索
- 特定の名前空間に検索範囲を制限
- 全文検索のような、ページ内容の単語による検索
- 正規表現を利用したページ名検索
- A-Z 順、名前順、年順、月順、日順、作成者順、多くの他のオプションによる一覧のソート
- それぞれの上にヘッダーを付けて一覧をグループに分割:A..Z、2010…2009、Jan..Dec、作成者名
- ページ名の代わりにページタイトルに基づくリンク表示
- ページのリンクにマウスを置いた時、便利な内容確認ツールチップを表示
- リンクに続けてページ内容のスッキリした断片を置くことで、素晴らしいブログのようなスタートページを作成
- スペースを最大限に活用:リンク一覧を複数列に表示
- 判りやすくするために、列に枠線を表示
単独で構築したのでは何の価値もありません:pagequery は巨人(つまり Dokuwiki のコア機能)の肩の上に構築されています。 内部では、素晴らしい組込みページとDokuwiki 内で利用できる全文検索機能を慎ましく利用しています。 このため、新たに検索構文を覚える必要はありません。 しかし、強力なソートとグループ化オプションを提供することで混合物に少し新しい何かをもたらします。
可能な用途例:
- 素晴らしい A-Z 索引、又は年/月索引付きの全 Wiki ページ一覧
- 最近変更されたページ一覧
- 特定の主題について議論のあるページ一覧(全文検索経由)
- あるユーザー作成の全ページ一覧
更新日でソートされ、年/月でグループ化された名前空間内の全ページ一覧例は以下のとおりです:
構文と使用方法
ページ文章内の一覧を表示したい場所に pagequery マークアップを挿入します。
同じページに異なる pagequery
一覧を持つこともできます。
1)
単純な場合:
{{pagequery>}}
複雑な場合:
{{pagequery>[query];fulltext;sort=key:direction,key2:direction;group;limit=10;cols=2;spelldate;proper}}
超複雑な場合…:
{{pagequery>[query];fulltext;sort=key:direction,key2:direction;group;limit=100;cols=6;spelldate;proper;snippet=5;border=inside;hidestart;case;natsort}}
NEW:判りやすくするために、プログラミング言語のように構文を複数行に展開できます。 空白は単純に無視されます。 例:
{{pagequery>query; fulltext; sort=key:direction,key2:direction; group; limit=100; cols=6; spelldate; proper; border=inside; hidestart; case; natsort }}
下の一覧は、とんでもなく長く徹底して威圧的に見えることを知っています。
願わくば、粘り強く使用方法を学び始めた場合、これが可能かあれが可能かをすぐに尋ねるでしょう。
そうして、多くの人々が議論ページに持っているような、自分の特定の要望に pagequery
を適応させることができます。
かなり柔軟ですが、これら全てのオプションはどこかで定義する必要があります。
それ故に下の長い一覧になるわけです。
原則として、異なるオプションはセミコロン(;)区切り、値(例:ソート内)はコンマ(,)区切り、複数値はコロン(:)区切りです。
完全な構文一覧
オプション | 説明 | 構文例 | デフォルト |
---|---|---|---|
query | > の直後に検索式を書きます。例:{{ pagequery>help;... }} デフォルトでは、ページ名(またはページID)で検索します。Wiki ページのコンテンツを検索するには、下にある fulltext オプションを使用します。 | * help test | 全ページ |
ページ名検索では正規表現2)を使用できます。全ページの表示には、* か .* を使用するか空白のままにします。3) | ^p.+ [ p で始まる単語] | ||
注: * は単独ではとても便利です。他の正規表現の中では正規表現のルールに注意する必要があります。 |
|||
namespaces | 検索ボックスと同様に、ページ名検索では名前空間オプションが有効です。^ or -ns: が除外、@ or ns: が包含です。 | ^:work @:home:games * | なし |
現在の名前空間 (.) と親の名前空間 (..) も対応しています4) | |||
注: 名前空間のオプションを使用する場合、ページ名検索を提供する必要があります(少なくとも* )。なぜなら、例えば、正規表現関数は ^work (名前空間)と ^work (“work”で始まるページ名)とを区別することができません。 |
|||
fulltext | フルテキスト検索を使用する。全ての DokuWiki 検索オプションが可能です。このオプションで精巧な検索のすべてのソートが可能になります:詳細は検索ページで調べて下さい。 | fulltext | |
fullregex | 正規表現を使用して完全なページID(名前空間を含みます)を検索できます。未加工なパーワーユーザー向け機能ですが、ページIDに対してしか動作しません。 | fullregex | |
sort | ソートキーとソート順。キー毎に奨励ソート順指定できる。sort=key:direction,key2:direction | sort=a:asc,name:asc sort=cyear,cmonth,name | なし |
ソートキー: | |||
a, ab, abc | 先頭1文字、2文字、3文字 | sort=a sort=ab | |
name, pagename | ページ名5) [グループ化されない] | sort=name | |
title, heading | ページタイトル(又は最初のヘッダー) [グループ化されない] | sort=title:desc | |
id, pageid | 全ページID、名前空間を含む [グループ化されない] | sort=id:asc | |
ns | 名前空間(ページ名抜き) | sort=ns | |
mdate, cdate | 変更日、作成日(全部) [グループ化されない] | sort=mdate | |
m[year][month][day] | By [m]odified [year][month][day]; any combination accepted | sort=myearmonthday sort=mmonthday | |
c[year][month][day] | By [c]reated [year][month][day]; any combination accepted | sort=cyearmonthday | |
creator | By page author | sort=creator | |
contributor | By page contributor(s). Note: only first name affects sort order6) | sort=contributor:asc | |
links | By a list of links contained on this page (mainly for filtering). The names (or ids) of all linked pages are joined in one space-delimited string, which can be searched via regex in the filter option below. | ||
backlinks | By a list of backlinks pointing to this page or these pages. Use as per links above. |
||
ソート順: | |||
asc, a | 昇順、例:a → z, 1 → 10 | sort=name:asc | asc |
desc, d | 降順、例:z → a, 10 → 1 | sort=mdate:desc | |
注:日付は降順がデフォルト(最新日付が上)、文章は昇順がデフォルト(A - Z) | |||
filter | 上記のソートキーのどれかを使って、正規表現を使用し、特定のページを含む又は除外した結果一覧を抽出する。 | ||
include | 構文は、上記のsort に似ている:filter=<key>:<expression>,<key2>:<expression2> | filter=creator:harry filter=contrib:.*(harry|sally).* |
|
exclude | 結果からページを除外するには、キーの前に ^ か ! を挿入する:filter=!<key>:<expression> | filter=!creator:harry |
|
dates | filter=オプションは実際の日付を認識し、それに基づいて正しく抽出します。例:filter=cdate:3 years ago->3 months ago |
||
-> 矢印区切りは、開始日・終了日を意味します。PHP の strtotime を使用することで、様々な形式を許容しています。php 関数を参照して下さい。 | |||
ある日付から現在まで | filter=mdate:24.1.2009-> |
||
ある日付まで | filter=mdate:->24.12.2012 |
||
直近3ヶ月間 | filter=mdate:3 months ago-> |
||
group | ソートキーの変更毎にグループヘッダーを表示7) | group | not grouped |
例えば、[myear](つまり変更年)でソートされている場合、グループヘッダーは年が変わる毎に挿入されます(2010…2009…2008…等々…) | |||
名前空間は maxns 制限8)以上のサブ名前空間でグループ化されます。 |
|||
注:全てが一意なキーはグループ化することができません(例:name、page/id、mdate、cdate) | |||
limit | 結果の最大数。 0=全て(デフォルト) | limit=10 | 全て |
spelldate | 数字の日付の代わりに、実際の月日名称を使用する。 | spelldate | 数字の日付 |
cols | 表示一覧の列数(最大=6) | cols=3 | 1 |
proper | Display page names and/or namespaces in Proper Case (i.e. every word capitalised, and no _'s). | なし | |
name | Display page names in proper-case | proper=name | |
header | Display group headers in proper-case | proper=header proper=hdr | |
both | Both the above options! | proper=both proper | |
注:これは DokuWiki のUseHeading オプションや他のプラグインとは異なります(下のdisplay オプションを参照して下さい)。 |
|||
border | 列の周囲に枠線を表示する | なし | |
none | 枠線を表示しない(デフォルト) | border=none | |
inside | 列の間だけ枠線を表示する | border=inside | |
outside | pagequery表の周囲に枠線を表示する | border=outside | |
both | 表と列両方の周りに枠線を表示する | border=both border | |
hidestart | 名前空間内のデフォルトスタートページを無視します | hidestart | スタートページを表示 |
注:このオプションが正しく動作するには、サイト設定管理内のスタートページ名設定に従ってスタートページを命名する必要があります! | |||
display | ページリンクの表示方法。例えば、ページ名、ページタイトル、ページID、ページ日付、ページメタデータの他の組合せで表示できます。 | ||
display=オプションは、テンプレート形式の置換文字列に対応します。 | display={name} ({cdate}) “Name-of-page (20 Jan 2013)” |
||
注:メタデータ名は全て中括弧{}で囲む必要があります。そうでない場合は通常の単語とみなされます! | |||
全ての Dokuwiki メタデータフィールドと使用中の pagequery メタ列に対応しています。ネストしているメタデータを取得するには key:subkey を使用します。 | display={date:created} {title} |
||
使用可能なフィールド名一覧はmetadataを参照して下さい | |||
snippet | ページのスニペット(プレビュー)表示方法を制御します: | tooltip | |
tooltip | 各ページリンク上にポップアップするツールチップ | snippet=tooltip snippet | |
The next three options use the following syntax: <format>,<count>,<extent> | |||
<format>: one of the formats listed below: inline, plain, quoted | |||
<count>: to show 1st <count> items in list with an preview | all | ||
<extent>: can be choice of [c]hars, [w]ords, [l]ines, or [~]<stop at> e.g. c? = ? chars, w? = ? words, l? = ? lines, ~? = search up to ? text/char/symbol | all | ||
inline | show in-line with the link | snippet=inline,5,c20 | |
plain | show as simple text below the link (mimimal formatting) | snippet=plain,10,w30 | |
quoted | show in tidy quotation box | snippet=quoted,3,l3 | |
maxns | The number of namespace levels to display. | show all | |
Display no more than 3 namespace levels, e.g. one:two:three | maxns=3 | ||
maxns=0 ⇒ show all levels (default) | |||
case | Honour case when sorting, i.e. a..z then A..Z | case | case insensitive |
natsort | Use PHP's natural sorting functions, e.g. 1,2,10,12 rather than 1,10,12,2 | natsort | normal sorting |
underline | それぞれのリンクを判りやすくするために、薄い下線を表示する | underline | なし |
label | PageQuery一覧の一番上に表示するラベル | label=A-Z of All Pages | なし |
hidemsg | 空の結果メッセージを隠す | hidemsg | 表示 |
hidejump | “先頭に戻る” リンクを隠す | hidejump | 表示 |
showcount | Show the total count of page links at bottom of list | showcount | hidden |
layout | tableレイアウトかcolumnレイアウトかを選択する table:ほぼ全てのブラウザと互換性のある HTML テーブルに基いています。 column:新しいCSS3カラムレイアウト機能を使用しています。古いブラウザでは動作しません9) | layout=column | layout=table |
fontsize | pagequery 一覧のベースフォントサイズを設定します。任意のCSSサイズ単位を使用できます。例:12px、1.2px、80%、等々 | fontsize=80% | 90% |
bullet | 一覧項目(リンク)の箇条書きスタイル なし、disc、circle、squareから選択 | bullet=square | なし |
Note: All options are optional, and left to its own devices the plugin will default to a long, boring, 1-column list… so you might want to take charge! |
ソートとグループ化
ソートとグループ化を上手く行うにはいくつかの要領があります。 Pagequery には多くのソートオプションがありますが、そのほとんどはグループ化可能な設計になっています。 主なヘッダーで一覧をグループ化するつもりなら、広いカテゴリーから狭いカテゴリー順にソートするのが最も理にかなっています。
例えば:年 ⇒ 月 ⇒ 名前
。
ソートアルゴリズムは最初に年
順にページ一覧をソートし、それから年毎のページを月
順にソートし、最後に月毎のページを名前
順にソートします。
全ての名前が一意でもない限り、他の方法でソートするのはあまり意味がありません:
その場合はグループ化もないでしょう!
上記のソートをグループ化した場合、以下のような構成になるでしょう:
- 年
- 月
- 名前
- 名前
- 月2
- 名前
- 名前
- 等々…
基本的なルールは:特定度の低いオプションから開始し、より具体的なオプションに進むです。
FAQとヒント
新しいページを追加しましたが、私の素敵な pagequery 一覧に表示されません。何故ですか?
- 一覧が含まれているページのキャッシュをオフにする必要があります。ページのどこかに
~~NOCACHE~~
を入れてください。瞬時に更新結果が表示されるはずです。
wikiに多くのデフォルトのスタートページを持っているが、名前空間の内容を一覧表示する時、スタートページを含めたくない。どうすれば消すことができますか?
hidestart
オプションを追加します。サイト設定管理のstartオプションが、使用中のスタートページ名に対応していることが前提です!
私はページ名の代わりにページタイトルを表示したい。どうすれば可能ですか?
- pagequeryマークアップのどこかに
display=title
オプションを入れなさい。
DokuWikiの新しいバージョンにwikiの内容を移行した後、pagequery がどのページにも表示されません。編集したページだけは、pagequery に再現します。任意のページが表示されません。
- SearchIndex プラグイン を使用してインデックスを作り直してください。又は、wiki の内容と同様にインデックスも移行してください。この問題は pagequery 自体とは何の関係もありません。
例
たとえば、特定の名前空間の全てのページを A-Z 索引で一覧表示したい場合、以下でやり方です:
{{pagequery>@namespace;fulltext;sort=a,name;group}} [fulltext version]
あるいは:
{{pagequery>@namespace *;sort=a,name;group;proper;cols=2}} [pagename version: allows regex's]
@namespace から結果を検索します(他の検索条件が存在しないので全てのページを取得します)。 一覧は最初の一文字('sort=a')で、次に各文字毎にアルファベット順('sort=name')でソートされます。 groupオプションは、最初の一文字だけで一覧をグループ化します(それぞれがユニークになるように名前でグループ化することはできません)。
3列で結果を表示し、“文書例”に下線なしでリンクする場合:
{{pagequery>@namespace *;sort=a,name;group;cols=3;proper}}
別の例として、作成年、作成月、でグループ化し、ページ名でソートし、2列表示し、実際の月名を表示し、更に“文書例”に下線なしでリンクし、テーブル列の周りに線を描く場合:
{{pagequery>@namespace *;sort=cyear,cmonth,name;group;spelldate;proper;cols=2;border}}
同じ条件ですが、ページ内で “help” という単語がを捜す(注:fulltext
は“ページ名”ではなく”ページ内容“から探すことを意味します):
{{pagequery>@namespace help;fulltext;sort=cyear,cmonth,name;group;spelldate;proper;cols=2}}
更新: ページ名(ページID)で検索する場合のみ、名前空間に対応しています。 全文検索と同じ構文を使用します。例;@namespace|^namespace。 相対名前空間にはまだ対応していません。 加えて、ページ名で検索する場合、正規表現を使用できます。
例:”drafts“ 名前空間内の全ページを検索し、数字で始まるファイルを一覧化し、ページ名でソートする:
{{pagequery>@drafts [0-9]+.*;sort=name}}
又は、”happy:go:lucky“名前空間にある全ファイルを年、作成日でソートし、 適切な場合には、2列で表示、一覧のページ名ではなくページタイトルを表示する。
{{pagequery>@happy:go:lucky *;sort=cyear,cdate;group;proper;display={title};cols=2}}
うまくいけば、これらの例は、pagequeryの仕組みを理解するのに役立ちます。
議論
pagequery 議論ページを参照してください。
filter
option below