**ls2_1.inc.php [#p6a92d5d] |RIGHT:100|LEFT:360|c |~サマリ|ls2 拡張。リストする階層が指定できる。| |~リビジョン|1.8| |~対応バージョン|1.4.3 - 1.4.5_1| |~投稿者|[[sonots]]| |~投稿日|&new{2004-08-10 (TUE) 14:09:19};| #contents *説明 [#m17ed6bb] [[ls2>PukiWiki/1.4/マニュアル/プラグイン/l#d2ce34ea]] 拡張((ls2 v1.23 の拡張です。))。[[自作プラグイン/ls3.inc.php]] とは違い、 ページ名による階層構造だけでリストする純粋な ls2 の拡張です。 MenuBar に #ls2_1(hogehoge/,depth=1,relative) のようにおいておくと便利です。 **標準プラグイン ls2 からの変更点(初版) [#k9cb86b6] -階層指定可能。 -階層的リスト表示機能。 -相対パス的表示機能。 -pukiwiki.ini.php で設定する $non_list の利用。 -include の無限ループを修正。 -link 時に常に include, title オプションが付加されていたが、単純に同時指定したオプションを利用するように変更。 それと同時にリンク名として利用される引数を「オプションと判定されない引数以降のすべての引数」から link=リンク名 と指定するように変更 ((ls2_1.inc.php v1.18 からです。それ以前は「オプションと判定されない最初の引数」でした))。 **その後の追加機能 [#u2116eb9] -表示件数指定機能 -除外ページ指定機能 -更新日時表示機能 -New 表示機能 -更新日時によるソート機能 -正規表現によるページのフィルタ機能 -インライン表示機能。 *書式 [#jcb5f796] #ls2_1(パターン[,オプション]) &ls2_1(パターン[,オプション]); インラインプラグイン時は強制的に display=inline となります。link オプションも可能です。 //index.php?plugin=ls2_1 //true 指定は 1。例:relative=1, false 指定は '' 例:relative= (内部的にも false ではなく '' になっている手の抜きよう)。デフォルト動作はオプション省略で。 **パラメータ [#r8a06bfd] -パターン(最初に指定) ~リストするページ名のパターン。省略するときもカンマが必要。 省略時はカレントページ+"/"が指定されたことになる。 また / を指定した場合はすべてのページにマッチする。 また // を指定した場合は"カレントページ"が指定されたことになる(もろ後付け)。 -title=true|false ~ページ中の見出しもリストする。 title だけでも title=true の意味になる。 -include=true|false ~インクルードしているページもリストする。 include だけでも include=true の意味になる。 -link=リンク表示文字列 ~actionプラグインを呼び出すリンクを表示。 link だけの場合は「パターン」の部分を使用したリンク表示文字列が作られる。 -reverse=true|false ~ページの並び順を反転し、降順にする。reverse だけでも reverse=true の意味にる。~ Note: hierarchy,relative コンビとの併用はきっと納得のいかない表示になります(昇順用に設計されたオプションなので)。 -compact=true|false ~リストのレベルを調整する。compact だけでも compact=true の意味になる。~ ファイル中の PLUGIN_LS2_1_LIST_COMPACT で初期値を設定できます。デフォルトでは TRUE です。 -title_compact=true|false ~title オプション用の compact 機能。title_compact だけでも title_compact=true の意味になる。~ ファイル中の PLUGIN_LS2_1_LIST_TITLE_COMPACT で初期値を設定できます。デフォルトでは TRUE です。 -depth=\d*[-+]?\d*((\d*[-+]?\d* は正規表現による表記です。\d は数字のことです。)) ~階層指定。1 なら 1 階層下のページのみを表示する。 2-4 のような指定も可能 (2,3,4 の意)。2- のように指定すると 2 階層下以下のページ。 2+1 のような指定も可能 (2 とそこから 1 階層下。つまり 2,3 の意)。 //0-2 = false-2 = -2. 1-0 = 1-false = 1-. 2+ = 2+false = 2+0. +2 = false+2 = 0+2. //0 または - または + は指定しないときと同じ。 //0 becomes false. - = false-false. + = false+false. -relative=true|false ~相対パス的表示。relative だけでも relative=true の意味になる。~ ファイル中の PLUGIN_LS2_1_RELATIVE で初期値を設定できます。デフォルトでは FALSE です。 -display=hierarchy|flat|inline ~リスト表示形式の指定。hierarchy では見出しのレベルに応じた階層的リスト表示。 flat では見出しのレベルによらず平らに表示。inline では横一列に表示。~ ファイル中の PLUGIN_CONTENTS2_1_DISPLAY で初期値を設定できます。デフォルトは flat です。~ Note1: 下位互換性のため hierarchy, hierarchy=true でも display=hierarchy になるようにしてあります。~ Note2: インライン型プラグインとして使用する場合は強制的に display=inline になります。~ Note3: 以前の動作とあわせるために、あえて見出しには display=flat が利かないようにしてあります。 -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 で初期値を設定できます。デフォルトでは ' ]' です。 -non_list=true|false ~pukiwiki.ini.php で定義される $non_list によるリスト排除。non_list だけでも non_list=true の意味になる。~ ファイル中の PLUGIN_LS2_1_NON_LIST で初期値を設定できます。デフォルトでは TRUE です。 -number=-?\d+ ((-?\d+ は正規表現による表記です。)) ~リンク表示件数指定。Blog2プラグインを使用するときに便利らしいです。 number=10 で頭から10件表示します。number=-10 のように - をつけると後ろの10件になります。 それでも逆順にはならないので reverse を使用してください。 -title_number=\d+ ~titleの表示件数指定。title_number=10で頭から10件表示します。 現在 - 機能はありません。title_number=1 でページの先頭見出しを表示することになります。 先頭見出しを必ず書く人は多いそうなのでそれを表示するのに便利かもしれません。 -except=正規表現 ~リストしないページを正規表現にて指定。$non_list だけでは足りないときに使用。 relative の場合でもページ名全体で判定。~ ヒント: マッチングには [[ereg>http://php.s3.to/man/function.ereg.html]] を使用します。 except=Test|sample → Test または sample を含むページを除く。 -datesort=true|false ~更新日時順(新しいほど上)に表示。datesort だけでも datesort=true の意味になる。~ Note: hierarchy,relative コンビとの併用はきっと納得のいかない表示になります (hierarchy,relative はページ名の昇順ソート時用のオプションなので)。~ Note2: include されるページに対しては無視なので include オプションと併用しても無駄です。~ Note3: 旧 new オプションです。注意してください。 -date=true|false ~ページの更新日時も表示。date だけでも date=true の意味になる。 -new=true|false ~&color(#ff0000){New!};も表示。new だけでも new=true の意味になる。~ New! が表示される条件は標準プラグイン new の条件を使用しています。 new プラグインが存在しない場合は独自設定(といっても new からコピーしたもの)を使用します。 -filter=正規表現 ~ページパターンをさらに正規表現で限定する。 パターンを / (全ての意味) にしてこちらだけを使うのもあり。~ ヒント: マッチングには [[ereg>http://php.s3.to/man/function.ereg.html]] を使用します。 *ダウンロード [#ead9194a] 拡張子の番号をはずして、plugin ディレクトリに放りこんでください。 |リビジョン|日付|変更点|h |&ref(./ls2_1.inc.php.26,v1.26);|02/28/2005|ちょっとコードの書き直し。動作的には何も変わっていません。| |&ref(./ls2_1.inc.php.25,v1.25);|02/28/2005|action プラグイン時の動作が壊れていたので修正。| |&ref(./ls2_1.inc.php.24,v1.24);|02/25/2005|[[contents2_1>自作プラグイン/contents2_1.inc.php]]のほうで要望のあったリストの横並び表示(display=inline)を実装。それにより hierarchy=true,false が display=hierarchy,flat,inline に変更。下位互換性のため hierarchy も残してあります。except の正規表現ルールを preg_match から ereg に変更した。'/' に気を使わないですむかも。コードの整理。| |v1.23|02/25/2005|date オプションを new プラグインに依存しないようにきちんと作り直した。New! を日付なしでも表示できるようになった。それにあわせて今までの new オプション(日付順ソート) を datesort に変更し、new は New! を表示するオプションにした。| |&ref(./ls2_1.inc.php.22,v1.22);|02/07/2005|先のマージで title オプション時のアンカーがこわれていたので修正。| |&ref(./ls2_1.inc.php.20,v1.20);|02/07/2005|PLUGIN_LS2_1_HIERARCHY, PLUGIN_LS2_1_RELATIVE でそれぞれの初期値を設定できるようにした。デフォルトは FALSE。| |&ref(./ls2_1.inc.php.19,v1.19);|02/07/2005|ls2 最新版とのマージで new オプションに不具合がでていたので修正| |&ref(./ls2_1.inc.php.18,v1.18);|02/06/2005|filter オプションの実装。オプションの引数に true または false を指定できるようにした。PLUGIN_LS2_1_COMPACT, ならびに TITLE_COMPACT のデフォルト値を TRUE にした。link オプションのリンク名を link=リンク名 で指定するようにした。いくつかのオプションで hierarchy,relative と併用すると納得のいかない表示になっていたのを修正。| |v1.17|02/06/2005|現在の ls2 最新版 v1.23 とのマージ。diff3 使ったけどもうやりたくない。| |&ref(./ls2_1.inc.php.16,v1.16);|12/26/2004|number オプションと new (更新日時ソート)オプションを併用した場合、最新 number 件になるように修正。おもむろに number 件取り出した後に更新日時ソートになってました。| |&ref(./ls2_1.inc.php.15,v1.15);|12/26/2004|更新日時によるソート機能(新しいもの順)を追加。それに伴い、先の new オプション(日付とNew表示)の名前を date に、更新日時によるソート(新しいもの順)を new に変更。| |&ref(./ls2_1.inc.php.14,v1.14);|12/18/2004|先の改造により link オプションの挙動に不具合が出ていたので修正。また new オプション(日付とNew表示)が実はきちんと動いていなかったので修正。| |&ref(./ls2_1.inc.php.13,v1.13);|12/17/2004|depth= がない場合 depth オプションと判断しないように。number オプションの仕様を変更。title_number, title_compact を追加。new オプション(日付とNew表示)を追加。| |&ref(./ls2_1.inc.php.11,v1.11);|10/27/2004|except オプションの追加| |&ref(./ls2_1.inc.php.10,v1.10);|10/22/2004|要望にあった表示件数指定機能(number)追加。アンケートのとおり depth オプションには depth= をつけるように変更。下位互換性を考えて今のところ depth= がなくても depth オプションと判断されるようになっています。ついでにソースをほんの少し整えると同時にコメントをちらほら。| |&ref(./ls2_1.inc.php.8,v1.8);|08/14/2004|無駄な処理があったので削除。preg_replace, ereg_replace を使用しないようにしてわずかながら高速化| |&ref(./ls2_1.inc.php.6,v1.6);|08/12/2004|ページ名のパターンに / を指定した場合すべてのページをリストするように改良。relativeオプション単独のときの挙動が仕様通りになっていなかったので修正| |&ref(./ls2_1.inc.php.5,v1.5);|08/11/2004|linkオプション指定時の挙動を修正| |&ref(./ls2_1.inc.php.4,v1.4);|08/10/2004|linkオプション指定時の挙動を修正| |&ref(./ls2_1.inc.php.0,v1.0);|08/10/2004|新規| *使用例 [#ac62520e] **初版機能 [#i4f76a8a] PLUGIN_LS2_1_LIST_COMPACT = FALSE; と設定されているものとして読んでください。 現在はデフォルトで TRUE です。 以降は test というページで記述したものとする。 ---- #ls2_1 とすると以下のように表示されるページ群があったとする。 -test/a -test/a/aa -test/a/aa/aaa -test/a/bb/bbb -test/c/cc/ccc ---- #ls2_1(,depth=1) -test/a ---- #ls2_1(,depth=1-2) -test/a -test/a/aa ---- #ls2_1(,depth=2+1) -test/a/aa -test/a/aa/aaa -test/a/bb/bbb -test/c/cc/ccc ---- #ls2_1(,relative) -a -a/aa -a/aa/aaa -a/bb/bbb -c/cc/ccc ---- #ls2_1(,display=hierarchy) -test/a --test/a/aa ---test/a/aa/aaa ---test/a/bb/bbb ---test/c/cc/ccc ---- #ls2_1(,display=hierarchy,compact) 上位のページが存在していない場合は詰まる。compact は display=hierarchy 用のオプション。 test/a/bb/bbb, test/c/cc/ccc が詰まっている。 -test/a --test/a/aa ---test/a/aa/aaa --test/a/bb/bbb -test/c/cc/ccc ---- #ls2_1(,relative,display=hierarchy) compact を併用しない relative,display=hierarchy は少しわかりづらい。test/a/aa/c/cc/ccc かと思ってしまう。 -a --aa ---aaa ---bb/bbb ---c/cc/ccc ---- #ls2_1(,relative,display=hierarchy,compact) -a --aa ---aaa --bb/bbb -c/cc/ccc ---- include, title, link, reverse に関しては標準プラグイン ls2 と意味合いは同等。 ls2 の compact は ls2_1 の title_compact です。 **その後の追加機能 [#oe6a4cb8] ここでも #ls2_1 とすると以下のように表示されるページ群があったとする。 -test/a -test/a/aa -test/a/aa/aaa -test/a/bb/bbb -test/c/cc/ccc ---- #ls2_1(,number=2) -test/a -test/a/aa ---- #ls2_1(,number=-2) -test/a/bb/bbb -test/c/cc/ccc ---- #ls2_1(,except=cc|/a$) -test/a/aa -test/a/aa/aaa -test/a/bb/bbb ---- #ls2_1(,date) -test/a 2004-10-10 (日) 23:03:05 -test/a/aa 2004-11-30 (金) 12:11:43 -test/a/aa/aaa 2004-03-03 (月) 16:04:05 -test/a/bb/bbb 2004-12-26 (水) 23:55:55 -test/c/cc/ccc 2004-10-11 (月) 01:02:04 と出力されるとする。 ---- #ls2_1(,datesort,date,new) -test/a/bb/bbb 2004-12-26 (水) 23:55:55 &color(#ff0000){New}; -test/a/aa 2004-11-30 (金) 12:11:43 -test/c/cc/ccc 2004-10-11 (月) 01:02:04 -test/a 2004-10-10 (日) 23:03:05 -test/a/aa/aaa 2004-03-03 (月) 16:04:05 ---- #ls2_1(,datesort) -test/a/bb/bbb -test/a/aa -test/c/cc/ccc -test/a -test/a/aa/aaa ---- #ls2_1(,display=flat) &ls2_1(,display=flat); [ test/a | test/a/aa | test/a/aa/aaa | test/a/bb/bbb | test/c/cc/ccc ] *悩み点、アンケート [#d6020b1d] 階層指定オプションは \d?[-+]?\d? ではなく、depth=\d?[-+]?\d? のように depth= があったほうがよいか。 数字はこのオプションと判定されるので、link オプション時のリンク名を数字だけにできなかったり、今後数字だけのオプション名が使用できないかも。 #vote(修正したほうがいい[4],今のままでいい[1]) ''depth= をつけるように確定しました(ver 1.13)。ご協力ありがとうございました。'' #hr title の compact と hierarchy の compact はわけるべきかどうか。 現状は分ける場合にオプション名を何にしたらよいのか分からないので一緒にしているだけです。 #vote(わけるべき[1],一緒でよい[0]) ''ちょっと長いですが、title_compact とすることにしました(ver 1.13)。ご協力ありがとうございました。'' #hr reverse,hierarchy,relative とするとよくわからない表示になる。 これは勘弁してください。 #hr non_list のデフォルト値を勝手に TRUE にしているがどうか。 #vote(TRUEでよい[3],FALSEでよい[0],自分で設定するのでどうでもよい[0]) ''TRUE で確定します(ver 1.18)。ご協力ありがとうございました。'' #hr compact のデフォルト値は用例説明に合わせるために FALSE にしているがどちらにすべきか。 #vote(TRUEでよい[1],FALSEでよい[0],自分で設定するのでどうでもよい[0]) ''TRUE で確定します。オプションで false にもできるようにしました(ver 1.18)。ご協力ありがとうございました。'' #hr title は headline かなにかほうがわかりやすくないか。title オプションはページの見出しもリストするオプションです。作者は最初 title とは題名のことなのでどこのことかと戸惑いました。見出しなら headline じゃないのか(H2タグとかだし)と。下位互換用にtitleも残さないと問題があるので結局、「変えるほどのことではない」です。 #vote(headlineがいい[1],むしろtitleが一番ピンとくる[1],変えるほどのことではない[0],変えてもいいがtitleも残したほうがいい[0]) 他にもっとピンとくるいいオプション名があったら教えてください *コメント [#h66dd779] バグ、リクエストなどがあったら教えてください。リクエストは詳細な仕様も書いてくれたりするとうれしいです。 #pcomment(自作プラグイン/ls2_1.inc.php/コメント,10,reply)