サマリ | ls2 拡張。リストする階層が指定できる。 |
---|---|
リビジョン | 1.8 |
対応バージョン | 1.4.x |
投稿者 | sonots |
投稿日 | 2004-08-10 (TUE) 14:09:19 |
sonots:ls2_1.inc.php に引っ越しました。フルスクラッチから書き直したsonots:lsx.inc.php が最新版です。
rev2.4 修正 -- 05/24/2006
ls2 拡張*1。自作プラグイン/ls3.inc.php とは違い、 ページ名による階層構造だけでリストする純粋な ls2 の拡張です。 MenuBar に #ls2_1(hogehoge/,depth=1,relative) のようにおいておくと便利です。
#ls2_1(パターン[,オプション])
&ls2_1(パターン[,オプション]);
インラインプラグイン時は強制的に display=inline となります。link オプションも可能です。
リストするページ名のパターン。省略するときもカンマが必要。 省略時はカレントページ+"/"が指定されたことになる。 また / を指定した場合はすべてのページにマッチする。 また // を指定した場合は"カレントページ"が指定されたことになる(もろ後付け)。
ページ中の見出しもリストする。 title だけでも title=true の意味になる。
インクルードしているページもリストする。 include だけでも include=true の意味になる。
actionプラグインを呼び出すリンクを表示。 link だけの場合は「パターン」の部分を使用したリンク表示文字列が作られる。
ページの並び順を反転し、降順にする。reverse だけでも reverse=true の意味にる。
Note: hierarchy,relative コンビとの併用はきっと納得のいかない表示になります(昇順用に設計されたオプションなので)。
リストのレベルを調整する。compact だけでも compact=true の意味になる。
ファイル中の PLUGIN_LS2_1_LIST_COMPACT で初期値を設定できます。デフォルトでは TRUE です。
title オプション用の compact 機能。title_compact だけでも title_compact=true の意味になる。
ファイル中の PLUGIN_LS2_1_LIST_TITLE_COMPACT で初期値を設定できます。デフォルトでは TRUE です。
階層指定。1 なら 1 階層下のページのみを表示する。 2-4 のような指定も可能 (2,3,4 の意)。2- のように指定すると 2 階層下以下のページ。 2+1 のような指定も可能 (2 とそこから 1 階層下。つまり 2,3 の意)。
相対パス的表示。relative だけでも relative=true の意味になる。
ファイル中の PLUGIN_LS2_1_RELATIVE で初期値を設定できます。デフォルトでは FALSE です。
リスト表示形式の指定。hierarchy では見出しのレベルに応じた階層的リスト表示。
flat では見出しのレベルによらず平らに表示。inline では横一列に表示。
ファイル中の PLUGIN_CONTENTS2_1_DISPLAY で初期値を設定できます。デフォルトは flat です。
Note1: 下位互換性のため hierarchy, hierarchy=true でも display=hierarchy になるようにしてあります。
Note2: インライン型プラグインとして使用する場合は強制的に display=inline になります。
Note3: 以前の動作とあわせるために、あえて見出しには display=flat が利かないようにしてあります。
display=inline 時の前につける文字を設定。
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_BEFORE で初期値を設定できます。デフォルトでは '[ ' です。
display=inline 時の区切り文字を設定。
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_DELIMITER で初期値を設定できます。デフォルトでは ' | ' です。
display=inline 時の後ろにつける文字を設定。
ファイル中の PLUGIN_LS2_1_DISPLAY_INLINE_AFTER で初期値を設定できます。デフォルトでは ' ]' です。
pukiwiki.ini.php で定義される $non_list によるリスト排除。non_list だけでも non_list=true の意味になる。
ファイル中の PLUGIN_LS2_1_NON_LIST で初期値を設定できます。デフォルトでは TRUE です。
リンク表示件数指定。Blog2プラグインを使用するときに便利らしいです。 number=10 で頭から10件表示します。number=-10 のように - をつけると後ろの10件になります。 それでも逆順にはならないので reverse を使用してください。
titleの表示件数指定。title_number=10で頭から10件表示します。 現在 - 機能はありません。title_number=1 でページの先頭見出しを表示することになります。 先頭見出しを必ず書く人は多いそうなのでそれを表示するのに便利かもしれません。
リストしないページを正規表現にて指定。$non_list だけでは足りないときに使用。
relative の場合でもページ名全体で判定。
ヒント: マッチングには ereg を使用します。
except=Test|sample → Test または sample を含むページを除く。
更新日時順(新しいほど上)に表示。datesort だけでも datesort=true の意味になる。
Note: hierarchy,relative コンビとの併用はきっと納得のいかない表示になります
(hierarchy,relative はページ名の昇順ソート時用のオプションなので)。
Note2: include されるページに対しては無視なので include オプションと併用しても無駄です。
Note3: 旧 new オプションです。注意してください。
ページの更新日時も表示。date だけでも date=true の意味になる。
New!も表示。new だけでも new=true の意味になる。
New! が表示される条件は標準プラグイン new の条件を使用しています。
new プラグインが存在しない場合は独自設定(といっても new からコピーしたもの)を使用します。
ページパターンをさらに正規表現で限定する。
パターンを / (全ての意味) にしてこちらだけを使うのもあり。
ヒント: マッチングには ereg を使用します。
拡張子の番号をはずして、plugin ディレクトリに放りこんでください。
リビジョン | 日付 | 変更点 |
![]() | 02/28/2005 | ちょっとコードの書き直し。動作的には何も変わっていません。 |
![]() | 02/28/2005 | action プラグイン時の動作が壊れていたので修正。 |
![]() | 02/25/2005 | contents2_1のほうで要望のあったリストの横並び表示(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! を表示するオプションにした。 |
![]() | 02/07/2005 | 先のマージで title オプション時のアンカーがこわれていたので修正。 |
![]() | 02/07/2005 | PLUGIN_LS2_1_HIERARCHY, PLUGIN_LS2_1_RELATIVE でそれぞれの初期値を設定できるようにした。デフォルトは FALSE。 |
![]() | 02/07/2005 | ls2 最新版とのマージで new オプションに不具合がでていたので修正 |
![]() | 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 使ったけどもうやりたくない。 |
![]() | 12/26/2004 | number オプションと new (更新日時ソート)オプションを併用した場合、最新 number 件になるように修正。おもむろに number 件取り出した後に更新日時ソートになってました。 |
![]() | 12/26/2004 | 更新日時によるソート機能(新しいもの順)を追加。それに伴い、先の new オプション(日付とNew表示)の名前を date に、更新日時によるソート(新しいもの順)を new に変更。 |
![]() | 12/18/2004 | 先の改造により link オプションの挙動に不具合が出ていたので修正。また new オプション(日付とNew表示)が実はきちんと動いていなかったので修正。 |
![]() | 12/17/2004 | depth= がない場合 depth オプションと判断しないように。number オプションの仕様を変更。title_number, title_compact を追加。new オプション(日付とNew表示)を追加。 |
![]() | 10/27/2004 | except オプションの追加 |
![]() | 10/22/2004 | 要望にあった表示件数指定機能(number)追加。アンケートのとおり depth オプションには depth= をつけるように変更。下位互換性を考えて今のところ depth= がなくても depth オプションと判断されるようになっています。ついでにソースをほんの少し整えると同時にコメントをちらほら。 |
![]() | 08/14/2004 | 無駄な処理があったので削除。preg_replace, ereg_replace を使用しないようにしてわずかながら高速化 |
![]() | 08/12/2004 | ページ名のパターンに / を指定した場合すべてのページをリストするように改良。relativeオプション単独のときの挙動が仕様通りになっていなかったので修正 |
![]() | 08/11/2004 | linkオプション指定時の挙動を修正 |
![]() | 08/10/2004 | linkオプション指定時の挙動を修正 |
![]() | 08/10/2004 | 新規 |
PLUGIN_LS2_1_LIST_COMPACT = FALSE; と設定されているものとして読んでください。 現在はデフォルトで TRUE です。
以降は test というページで記述したものとする。
#ls2_1
とすると以下のように表示されるページ群があったとする。
#ls2_1(,depth=1)
#ls2_1(,depth=1-2)
#ls2_1(,depth=2+1)
#ls2_1(,relative)
#ls2_1(,display=hierarchy)
#ls2_1(,display=hierarchy,compact)
上位のページが存在していない場合は詰まる。compact は display=hierarchy 用のオプション。 test/a/bb/bbb, test/c/cc/ccc が詰まっている。
#ls2_1(,relative,display=hierarchy)
compact を併用しない relative,display=hierarchy は少しわかりづらい。test/a/aa/c/cc/ccc かと思ってしまう。
#ls2_1(,relative,display=hierarchy,compact)
include, title, link, reverse に関しては標準プラグイン ls2 と意味合いは同等。 ls2 の compact は ls2_1 の title_compact です。
ここでも
#ls2_1
とすると以下のように表示されるページ群があったとする。
#ls2_1(,number=2)
#ls2_1(,number=-2)
#ls2_1(,except=cc|/a$)
#ls2_1(,date)
と出力されるとする。
#ls2_1(,datesort,date,new)
#ls2_1(,datesort)
#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 ]
階層指定オプションは \d?[-+]?\d? ではなく、depth=\d?[-+]?\d? のように depth= があったほうがよいか。 数字はこのオプションと判定されるので、link オプション時のリンク名を数字だけにできなかったり、今後数字だけのオプション名が使用できないかも。
選択肢 | 投票 |
修正したほうがいい | 5 |
今のままでいい | 1 |
depth= をつけるように確定しました(ver 1.13)。ご協力ありがとうございました。
title の compact と hierarchy の compact はわけるべきかどうか。 現状は分ける場合にオプション名を何にしたらよいのか分からないので一緒にしているだけです。
選択肢 | 投票 |
わけるべき | 1 |
一緒でよい | 0 |
ちょっと長いですが、title_compact とすることにしました(ver 1.13)。ご協力ありがとうございました。
reverse,hierarchy,relative とするとよくわからない表示になる。 これは勘弁してください。
non_list のデフォルト値を勝手に TRUE にしているがどうか。
選択肢 | 投票 |
TRUEでよい | 3 |
FALSEでよい | 0 |
自分で設定するのでどうでもよい | 1 |
TRUE で確定します(ver 1.18)。ご協力ありがとうございました。
compact のデフォルト値は用例説明に合わせるために FALSE にしているがどちらにすべきか。
選択肢 | 投票 |
TRUEでよい | 2 |
FALSEでよい | 0 |
自分で設定するのでどうでもよい | 0 |
TRUE で確定します。オプションで false にもできるようにしました(ver 1.18)。ご協力ありがとうございました。
title は headline かなにかほうがわかりやすくないか。title オプションはページの見出しもリストするオプションです。作者は最初 title とは題名のことなのでどこのことかと戸惑いました。見出しなら headline じゃないのか(H2タグとかだし)と。下位互換用にtitleも残さないと問題があるので結局、「変えるほどのことではない」です。
選択肢 | 投票 |
headlineがいい | 2 |
むしろtitleが一番ピンとくる | 1 |
変えるほどのことではない | 0 |
変えてもいいがtitleも残したほうがいい | 0 |
他にもっとピンとくるいいオプション名があったら教えてください
バグ、リクエストなどがあったら教えてください。リクエストは詳細な仕様も書いてくれたりするとうれしいです。
中間階層のページが存在していない場合は、リンクしないで文字として階層を残すように表示するオプションって、できませんかね?特に、ページの有無に拘ってはいません。階層を正しく表示したいオプションなんですけどね。
できると思います。それも迷ったんですよね。デフォルトの動作をどちらにしようか。その際にブラケットでくくった場合と同じように ? リンクをつける方法もあると思うのですが、ただのテキストにしたほうがいいでしょうか?オプション名を何にしましょう?
あ、思い出しました。元のコードが存在する1ページに対して1リスト(li)のようなコードだったので、1ページ複数リストにしようとすると大分手を加えないといけなくなりそうで、とりあえず辞めたのでした。またおそらく動作が重くなると思われます。気長に待っていてください(追記:学校が始まってしまったので本当に手を付ける暇がなさそうです。申し訳ないです。 9/3)
hierarchy以外のオプションも同時に指定したときはどういう動作を期待していますでしょうか? reverse はまた無視することになるとして、
#ls2_1(,2-,relative,hierarchy)は現在
なわけですが(compactがないので少しわかりづらいですが)、
のようになればよいですか?また、2-,hierarchy だけの場合は
で、よいですか?この場合にわざわざ test/c/cc などを出す必要があるでしょうか?そういうオプションだと思ってしまえばそれまでですが。
こんな感じなんですよね。仮想階層の1階層のみを表示して整理したイメージです。
それはいいのですが、他のオプションと併用したときの動作をどうすればよいかです。upk さんの例は #ls2_1(test,relative,hierarchy,新しいオプション) のときの動作でそのようにさせるつもりです。私の書いた上の仕様でよろしいでしょうか? #ls2_1(test/,2-,hierarchy,新しいオプション) のときに test/c/cc もださないと一体どういう意味合いのオプションなのかわからなくなるのでやはり表示させることになると思います。
それとも 2- にもかかわらず仮想的な一階層下のページ名 (test/c など) を出力させたいのでしょうか?他に実際に test/d のようなページがあった場合、2- なのでそのページはリストしないのですが、test/c/cc/ccc があるため test/c は出力するというよくわからないことになってしまいます。
自作プラグインからの一覧での表示が不正だったので、リビジョンを追加しました。
選択肢 | 投票 |
number=5 | 5 |
number=1-5 | 0 |
選択肢 | 投票 |
すべき | 0 |
しないべき | 2 |
選択肢 | 投票 |
してくれ | 1 |
いらない | 1 |
選択肢 | 投票 |
してる | 2 |
してない | 2 |
選択肢 | 投票 |
ぜひともつけてくれ | 2 |
選択肢 | 投票 |
今のままでいい | 2 |
正規表現 | 0 |
$href = $script . '?cmd=read&page=' . $r_page;は
$href = $script . '?' . $r_page;にしませんか?*6 -- sagen 2005-03-16 (水) 14:36:31
if ($params['relative']) {を
if ($params['relative'] || PLUGIN_LS2_1_RELATIVE) {にしてみました。 -- 2005-06-06 (月) 15:34:25