#author("2016-10-15T09:02:05+09:00","","")
*説明 [#m17ed6bb]
----
[[contents>PukiWiki/1.4/Manual/Plugin/A-D#vd4dabcd]] プラグインは実際のところプラグインではなく、本体組み込みの機能です。
拡張がしにくいのでプラグイン化しました。
アイデアの多くは[[自作プラグイン/ls2_1.inc.php]]からきています。ということで名前はcontents2_1 です。

~#contents をおいた位置より上の見出しが表示されても無駄だなと思っていた人が使うかもしれません。例えばこのページだと上の contents2_1.inc.php のリンクがいらない、と。

MenuBar に
 #contents2_1(fromhere=false,hierarchy=false)
としておくのも便利かもしれません。hierarchy はお好みで。

**既知の問題点 [#l67274d6]

問題1.include オプションを完全にはできないことが発覚しました。アンカー番号は convert_html が呼ばれた回数が振られるのですが、#contents2_1
が数えているのは結局のところ #include の数にしかすぎません。
つまり、convert_html を呼ぶ include 以外のプラグインが呼ばれるときっとずれます。

問題2.#include でとりこまれたページで表示される #contents2_1
のアンカーリンクの番号がまた1からはじまりうまくいきません。これは痛いです。

考察1.convert_html 中の static $contents_id を global にしたらどうかと考えてみましたが、だめです。

考察2.plugin_contents2_1_convert を convert_html が呼んだときに引数で $contents_id を渡す
ことができたらどうかと考えてみましたが、そのように convert_html を改造できたとしても、問題2は直せますが問題1は変わりません。~
ちなみに本体組み込み #contents は convert_html が $contents_id を渡しているこのような形です。include オプションがないのでこれ以上は悩む必要がないのです。~
問題2のためにやりたいところですが、はてさて・・・。

考察3.とりあえず固定アンカーで逃げる。現在の pukiwiki はデフォルトで $fixed_heading_anchor = 1; のようなので全然ありみたいですね。

現状解.固定アンカーで逃げています。とりあえず''解決''。

*書式 [#jcb5f796]
 #contents2_1([オプション])

 &contents2_1([オプション]);
インライン型プラグイン時は強制的に display=inline となります。

**オプション [#r8a06bfd]
-page=ページ名
~見出しリストを行うページを指定。デフォルトはカレントページ。
-fromhere=true|false
~#contents2_1 がある次の行以降の見出しのみをリストする。fromhere だけでも true になります。~
ファイル中の PLUGIN_CONTENTS2_1_FROMHEARE で初期値を設定できます。デフォルトで TRUE です。~
Note: 現状では #contents2_1 が2つあると一番上のものだけに反応してしまいます。
あえて page オプションで表示ページと異なるページを指定した場合は発動しないようにしています。
-display=hierarchy|flat|inline
~リスト表示形式の指定。hierarchy では見出しのレベルに応じた階層的リスト表示。
flat では見出しのレベルによらず平らに表示。inline では横に並べて表示。~
ファイル中の PLUGIN_CONTENTS2_1_DISPLAY で初期値を設定できます。デフォルトは hierarchy です。~
Note: インライン型プラグインとして使用する場合は強制的に display=inline となる。~
-inline_before=文字列
~display=inline 時の前につける文字を設定。~
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_BEFORE で初期値を設定できます。デフォルトでは '[ ' です。
-inline_delimiter=文字列
~display=inline 時の区切り文字を設定。~
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_DELIMITER で初期値を設定できます。デフォルトでは ' | ' です。
-inline_after=文字列
~display=inline 時の後ろにつける文字を設定。~
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_AFTER で初期値を設定できます。デフォルトでは ' ]' です。
-compact=true|false
~リストのレベルを調節する。display=hierarchy 用のオプションです。compact だけでも true になります。~
ファイル中の PLUGIN_CONTENTS2_1_COMPACT で初期値を設定できます。デフォルトで TRUE です。
-number=\d+ ((\d+ は正規表現による表記です。例えば \d は数字のことです。))
~表示件数の指定。~
Note: include ページ名の表示も1つとカウントします。
-depth=\d*[-+]?\d*((\d*[-+]?\d* は正規表現による表記です。\d は数字のことです。))
~見出しレベル指定。1 なら見出しレベル 1 のみを表示する。
2-3 のような指定も可能 (2,3 の意)。2- のように指定するとレベル 2 以上の見出し。。
2+1 のような指定も可能 (2 とそこから +1 。つまり 2,3 の意)。~
Note: include ページ名がレベル0、見出しはレベル1以降です。
現状は compact を使用していても(デフォルトで TRUE)、depth オプションで指定するレベルは変わりません。
よって見た目と指定すべきレベルが違うかもしれません。一旦 compact=false として調べれば確実です。
-except=正規表現
~リストしない見出しを正規表現にて指定。~
ヒント: [[ereg>PHP関数:ereg]] で判定を行います。
except=Test|sample → Test または sample を含む見出しを除く。
-include=true|false
~#include プラグインで取り込んでいるページとその見出しも扱う。include だけでも true になります。~
ファイル中の PLUGIN_CONTENTS2_1_INCLUDE で初期値を設定できます。デフォルトで TRUE です。~
Note: ページタイトルへのジャンプは #include がアンカーを張ってくれないと無理です。
下の[[もっと便利に - include2.inc.php>#f0771d8a]] をご覧ください。
-fixed_anchor=true|false
~固定アンカーがあればそれを利用する。fixed_anchor だけでも true になります。推奨です。~
ファイル中の PLUGIN_CONTENTS2_1_FIXEDANCHOR で初期値を設定できます。デフォルトで TRUE です。~
Note: 固定アンカーをつけるためには pukiwiki.ini.php  中で $fixed_heading_anchor = 1 と設定しなければいけません。現在の pukiwiki ではデフォルトで 1 です。

*ダウンロード [#ead9194a]
拡張子の番号をはずして、plugin ディレクトリに放りこんでください。
|リビジョン|日付|変更点|h
|&ref(./contents2_1.inc.php.13,v1.13);|03/05/2005|include ページタイトルに対するアンカーが固定なアンカーになるように変更。[[自作プラグイン/include2.inc.php]]の最新版が対応しているので include にはそちらを利用してください。これに伴い改造include.inc.phpは表面上消しました。|
|&ref(./contents2_1.inc.php.12,v1.12);|03/04/2005|[[自作プラグイン/include2.inc.php]]の対応を受けて対応。#include, #include2 共に認識します。|
|&ref(./contents2_1.inc.php.11,v1.11);|02/26/2005|既知の問題点を固定アンカーで回避。display=inline 時の区切り文字等をオプションでも設定できるようにした。|
|&ref(./contents2_1.inc.php.10,v1.10);|02/18/2005|要望をうけてリストではなく横一列に表示する機能を追加。それをうけて hierarchy=true,false オプションは display=hierarchy,flat となり、今回の追加機能は display=inline と指定することになりました。depth オプション指定時のレベルを変更。include ページ名がレベル0、見出しはレベル1以降とたぶんわかりやすくなりました。インライン型プラグインとして実行可能に。ただし強制的に display=inline です。CSSで設定しやすいようにHTMLにクラス名を追加。ソースコードの整理。|
|&ref(./contents2_1.inc.php.9,v1.09);|02/14/2005|typo が原因で depth オプションが正しく動いていなかったので修正|
|&ref(./contents2_1.inc.php.7,v1.07);|02/08/2005|pageオプション使用時でもリンクにアンカーしか使用していなかったので修正|
|&ref(./contents2_1.inc.php.6,v1.06);|02/08/2005|v1.05の修正でv1.04時に修正したはずの症状がまたでていたので修正|
|&ref(./contents2_1.inc.php.5,v1.05);|02/08/2005|今度は再帰 include のときのアンカーの処理が間違っていたので修正|
|&ref(./contents2_1.inc.php.4,v1.04);|02/08/2005|別のところでまたアンカー付けの処理が間違っていたので修正|
|&ref(./contents2_1.inc.php.3,v1.03);|02/08/2005|アンカー付けの処理が間違っていたので修正|
|&ref(./contents2_1.inc.php.2,v1.02);|02/06/2005|page オプションを指定した場合 fromhere オプションが発動しないようにした。|
|&ref(./contents2_1.inc.php.1,v1.01);|02/06/2005|初版|


*もっと便利に - include2.inc.php [#f0771d8a]

include プラグインは現状ではページタイトルの見出しにアンカーをつけてくれないので、
ジャンプできません。

[[自作プラグイン/include2.inc.php]] は #contetns2_1 のアンカーリンクに対応しているのでそちらを利用するとページタイトルへジャンプできるようになります。

*使用例 [#ac62520e]
次のような「とあるページ」があったとします。
 **AA
 #contents2_1
 *B
 ***BBB
 **CC
 #include(別のページ)
 *D

「別のページ」の内容は次のとおりだったとします。
 *1
 #contents2_1
 **11

「とあるページ」の #contetns2_1 が変更されると思ってください。
----
 #contents2_1
-B
--BBB
-CC
-別のページ
--1
---11
-D

----
 #contents2_1(fromhere=false)
-AA
-B
--BB
-CC
-別のページ
--1
---11
-D

MenuBar に設定する場合は fromhere=false を用いることになるでしょう。

----
 #contents2_1(page=別のページ)
-1
--11

----
 #contents2_1(compact=false)
--B
---BBB (表現できません。もう一段階さがります。)
---CC
-別のページ
--1
---11
--D

 #contents2_1(compact=false,include=false)
-B
---BBB
--CC
-D

----
 #contents2_1(compact=false,depth=1-2)
--B
---CC
--1
---11
--D

 #contents2_1(compact=true,depth=1-2)
-B
-CC
-1
--11
-D

 #contents2_1(compact=false,depth=1-2,include=false)
-B
--CC
-D

----
 #contents2_1(display=flat)
-B
-BBB
-CC
-別のページ
-1
-11
-D

----
 #contents2_1(display=inline,depth=1)
[ B | 1 | D ]

----
 #contents2_1(number=5)
-B
--BBB
-CC
-別のページ
--1

----
 #contents2_1(except=B)
-CC
-別のページ
--1
---11
-D

----
 #contents2_1(include=false)
-B
--BBB
-CC
-D

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS