使い方
| Table of Contents |
設定
固定アンカ必須です。pukiwiki.ini.php で $fixed_heading_anchor = 1; と設定します。 PukiWiki Plus! の場合デフォルトで有効です。
固定アンカは編集保存する際に自動作成されます(見出しの横に [#kf58bbaf] のようなものが作成されます)。 今まで設定していなかった場合、全てのページを編集保存しなおす必要があります。
replaceplugin.inc.php を使用して全ページの #contents を #contentsx に変換する処理を行うと編集保存もすることになりアンカーを作成してくれるので一石二鳥かもしれません。
書式
#contentsx(オプション)
option=bool なオプションは共通して、 option, option=true, option=on でそのオプションが有効になり、option=false, option=off で無効になります。
- fromhere=bool
- #contentsx がある行以降の見出しのみをリストする。デフォルトで有効。
備考:page オプションで別ページを指定した場合は強制的に off になります。
- #contentsx がある行以降の見出しのみをリストする。デフォルトで有効。
- include=bool
- #include プラグインで取り込んでいるページとその見出しも扱う。 デフォルトで有効。
- hierarchy=bool
- 階層的表示。デフォルトで有効。
- compact=bool
- リストのレベルを詰める。デフォルトで有効。使用例参照のこと。
- num=数字
- 表示件数指定。正数は前からN件目、負数は後ろからN件目の意味。
num=1:10 で先頭1件目から10件目までの意味。num=-10:-1 で後ろ10件目から後ろ1件目までの意味。num=2: で先頭2件目から最後までの意味。
num=5+2 で先頭5件目から、そこから2件先まで(5,6,7)の意味。
- 表示件数指定。正数は前からN件目、負数は後ろからN件目の意味。
- depth=数字
- 見出しレベル限定。数字の指定は num と同じ書式。includeページタイトルはレベル0になる。 compact=on,off に関わらず絶対値指定。
- except=正規表現
- リストしない見出しを正規表現にて指定。
ヒント: ereg
で判定を行います。
except=Test|sample → Test または sample を含む見出しを除く。
- リストしない見出しを正規表現にて指定。
- filter=正規表現
- リストする見出しを正規表現で限定する。
ヒント: ereg
で判定を行います。
- リストする見出しを正規表現で限定する。
- link=on|off|anchor|page
- リンク形態指定。デフォルトは on。
on は現在ページへは link=anchor、page オプションで別ページが指定されていた場合 link=page。
anchor は強制的にアンカーのみ使用。
page は強制的にページ名も含めたリンク。
off はリンクしない。
ヒント: link=anchor で include したページに対してもページ内アンカーによるリンクを貼れます。include にはもともと対応していますが、類似のものにも対応できると思います。link=page はついでです。
- リンク形態指定。デフォルトは on。
- page=ページ名
- 見出しリストを行うページを指定。デフォルトはカレントページ。
- cache=on|off|reset
- キャッシュの利用。デフォルトで有効。reset でキャッシュの強制再作成。
動作例
次のような「とあるページ」があったとします。
**AA #contentsx *B ***BBB **BC #include(別のページ) *D
「別のページ」の内容は次のとおりだったとします。
*1 #contentsx **11
「とあるページ」の #contetnsx が変更されると思ってください。
まず参考に #contents
#contents
- AA
- B
- BBB
- BC
- D
#contentsx のデフォルト動作
#contentsx // == #contentsx(include,fromhere,compact,hierarchy)
- B
- BBB
- BC
- 別のページ
- 1
- 11
- 1
- D
#contentsx(include=off,fromhere=off,compact=off,hierarchy=off)
- AA
- B
- BBB
- BC
- D
#contentsx(include=off,fromhere=off,compact=off,hierarchy) // 以下 hierarchy 略
- AA
- B
- BBB
- BC
- D
#contentsx(include=off,fromhere=off,compact) // compact
- AA (<-注目)
- B
- BBB (<-注目)
- BC
- D
完全に #contents と同じものはないが、compact としてはこの挙動が正解だと思っている(#contents の場合は先頭要素だけが compact されている)。
#contentsx(include=off,fromhere,compact=off) // fromhere
- B
- BBB
- BC
- D
#contentsx(include,fromhere=off,compact=off) // include
- AA
- B
- BBB (表現できない。もう1段下がる)
- BC
- 別のページ
- 1
- 11
- D
- 1
include がある場合、全体的に1段階下がる。
#contentsx(depth=1:2,compact=false)
- B
- BC
- 1
- 11
- D
include が depth=0
#contentsx(depth=1:2) // compact
- B
- BC
- 1
- 11
- D
#contentsx(depth=1:2,filter=B)
- B
- BC
#contentsx(depth=1:2,except=B)
- 1
- 11
- D
#contentsx(depth=1:2,except=B,num=1:2)
- 1
- 11
#contentsx(page=別のページ)
- 1
- 11
FAQ
MenuBar に設置する場合?
MenuBar に設置する際は
#contentsx(fromhere=off)
のように記述しておきます*1。
#contents を一度に置き換えたい
プラグインの置き換え用プラグインとして replaceplugin.inc.php を作成してありますので利用してみてください。
CSSデザイン
#contentsx は
<table border="0" class="toc"><tbody>
<tr><td class="toctitle">
<span>Table of Contents</span>
</td></tr>
<tr><td class="toclist">
<ul class="contentsx">
<li> ... </li>
<li> ... </li>
</ul>
</td></tr>
</tbody></table>
のようなタグを出力します(微妙にMediaWikiの真似)。クラス toc、toctitle、toclist を利用します。
このサイトでは以下のようにしています。 サイトのデザインは各々で違うと思いますので、参考までに。
/* contentsx */
div#body .toc {
font-size:13px;
border:2px solid gray;
background:white;
margin:0px 0px 0px 10px;
z-index: 2;
}
div#body .toc .toctitle {
text-align:center;
margin:0px 10px 0px 0px;
}
div#body .toc .toctitle span {
font-weight:bold;
margin:0px 5px 0px 5px;
}
div#body .toc .toclist ul{
margin:5px 5px 5px 20px;
}
div#body .toc .toclist ul ul{
margin-left:15px;
}
Table of Contents の文字を消したい場合は
div#body .toc .toctitle {
display: none;
}
とでもしてください。
ちなみに #lsx プラグインからの呼び出しの場合 <ul class="contentsx">....</ul> の部分のみが出力されます。toc, toctitle, toclist は #contentsx 単体呼び出し用と考えて使用できます。
キャッシュについて
- 1ページにつき1キャッシュです。
- cache/ページ名.contentsx のような形で保存されます。
- ページを毎回パースして見出しを見つける処理を短縮するためのキャッシュです。そこの計算量が多すぎなのです。
- 最終出力HTMLをキャッシュしているわけではありません。
- 最終出力HTMLをキャッシュしたい場合は ../ecache.inc.php を使用してください(更新タイミングは contentsx と同じです)
- ページ参照時に(プラグイン実行時に)キャッシュファイルとdiffファイルのタイムスタンプを比べて、Wikiページのほうが新しければ更新します。
- Wiki ページではなく diff ファイルのタイムスタンプを見ることによって「タイムスタンプを更新しない」編集でもキャッシュを最新に保つことができます。
- アクション型(?cmd=contentsx)で管理者ならばキャッシュのリセットができます。


