**ls2_1.inc.php [#p6a92d5d] |RIGHT:100|LEFT:360|c |~サマリ|ls2 拡張。リストする階層が指定できる。| |~リビジョン|1.8| |~対応バージョン|1.4.3| |~投稿者|[[sonots]]| |~投稿日|&new{2004-08-10 (TUE) 14:09:19};| #contents *説明 [#m17ed6bb] [[ls2>PukiWiki/1.4/マニュアル/プラグイン/l#d2ce34ea]] 拡張((ls2 v1.15 の拡張です。ただし XSS 脆弱性は修正してあります。))。[[自作プラグイン/ls3.inc.php]] とは違い、 ページ名による階層構造だけでリストする純粋な ls2 の拡張です。 MenuBar に #ls2_1(hogehoge/,depth=1,relative) のようにおいておくと便利です。 **標準プラグイン ls2 からの変更点(初版) [#k9cb86b6] -階層指定可能。 -階層的リスト表示機能。 -相対パス的表示機能。 -pukiwiki.ini.php で設定する $non_list の利用。 -include の無限ループを修正。 -link 時に常に include, title オプションが付加されていたが、単純に同時指定したオプションを利用するように変更。それに伴いリンク名として利用される引数を「オプションと判定されない引数以降のすべての引数」から「オプションと判定されない最初の引数」に変更。 **その後の追加機能 [#u2116eb9] -表示件数指定機能 -除外ページ指定機能 -更新日時表示機能 -更新日時によるソート機能 *書式 [#jcb5f796] #ls2(パターン[,オプション]) **パラメータ [#r8a06bfd] -パターン(最初に指定)~ リストするページ名のパターン。省略するときもカンマが必要。省略時はカレントページ+"/"が指定されたことになる。また / を指定した場合はすべてのページにマッチする。 -title~ ページ中の見出しもリストする -include~ インクルードしているページもリストする -link~ actionプラグインを呼び出すリンクを表示。このとき、オプションと判定されない最初の引数をリンク名として利用できる。例)#ls2_1(,link,リンクです) -reverse~ ページの並び順を反転し、降順にする。Note: hierarchy,relative コンビとの併用はきっとおかしな表示になります(昇順用に設計されたオプションなので)。 -compact~ 見出しレベルを調整する。 LS2_1_LIST_COMPACT((LS2_1_LIST_COMPACT はファイルの直接編集により設定可能です。))がTRUEの時は常に compact -title_compact~ title オプション用の compact 機能。 LS2_1_LIST_TITLE_COMPACTがTRUEの時は常に compact -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~ 相対パス的表示。 -hierarchy~ 階層的リスト表示。 -non_list~ pukiwiki.ini.php で定義される $non_list によるリスト排除。 LS2_1_NON_LIST((LS2_1_NON_LIST はファイルの直接編集により設定可能です。))がTRUEの時は常に $non_list を利用する。 現在デフォルトで TRUE です。 -number=-?\d+ ((-?\d+ は正規表現による表記です。))~ リンク表示件数指定。Blog2プラグインを使用するときに便利らしいです。number=10 で頭から10件表示します。number=-10 のように - をつけると後ろの10件になります。それでも逆順にはならないので reverse を使用してください。Note: 現状では - 指定と hierarchy,relative コンビとの併用はきっとおかしな表示になります。 -title_number=\d+~ titleの表示件数指定。title_number=10で頭から10件表示します。現在 - 機能はありません。title_number=1 でページの先頭見出しを表示することになります。先頭見出しを必ず書く人は多いそうなのでそれを表示するのに便利かもしれません。 -except=正規表現~ リストしないページを正規表現にて指定。$non_list だけでは足りないときに使用。 relative の場合でもページ名全体で判定。 ヒント: except=Test|sample → Test または sample を含むページを除く。 -new~ 更新日時順(新しいほど上)に表示。Note: hierarchy,relative コンビとの併用はきっとおかしな表示になります(hierarchy,relative はページ名によるソート用のオプションなので)。 -date~ ページの更新日時も表示。ついでに new プラグインを利用した New 表示も行う。 *ダウンロード [#ead9194a] 拡張子の番号をはずして、plugin ディレクトリに放りこんでください。 |リビジョン|日付|変更点|h |&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 オプションが実はきちんと動いていなかったので修正。| |&ref(./ls2_1.inc.php.13,v1.13);|12/17/2004|depth= がない場合 depth オプションと判断しないように。number オプションの仕様を変更。title_number, title_compact を追加。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] 以降は 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(,hierarchy) -test/a --test/a/aa ---test/a/aa/aaa ---test/a/bb/bbb ---test/c/cc/ccc ---- #ls2_1(,hierarchy,compact) 上位のページが存在していない場合は詰まる。compact は hierarchy または title 用のオプション。 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,hierarchy) compact を併用しない relative,hierarchy は少しわかりづらい。test/a/aa/c/cc/ccc かと思ってしまう。 -a --aa ---aaa ---bb/bbb ---c/cc/ccc ---- #ls2_1(,relative,hierarchy,compact) -a --aa ---aaa --bb/bbb -c/cc/ccc ---- include, title(+compact), link, reverse に関しては標準プラグイン ls2 と意味合いは同等。 *悩み点、アンケート [#d6020b1d] 階層指定オプションは \d?[-+]?\d? ではなく、depth=\d?[-+]?\d? のように depth= があったほうがよいか。 数字はこのオプションと判定されるので、link オプション時のリンク名を数字だけにできなかったり、今後数字だけのオプション名が使用できないかも。 #vote(修正したほうがいい[4],今のままでいい[0]) ''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]) #hr compact のデフォルト値は用例説明に合わせるために FALSE にしているがどちらにすべきか。 #vote(TRUEでよい[1],FALSEでよい[0],自分で設定するのでどうでもよい[0]) #hr title は headline かなにかほうがわかりやすくないか。title オプションはページの見出しもリストするオプションです。作者は最初 title とは題名のことなのでどこのことかと戸惑いました。見出しなら headline じゃないのか(H2タグとかだし)と。下位互換用にtitleも残さないと問題があるので結局、「変えるほどのことではない」です。 #vote(headlineがいい[0],むしろtitleが一番ピンとくる[1],変えるほどのことではない[0],変えてもいいがtitleも残したほうがいい[0]) 他にもっとピンとくるいいオプション名があったら教えてください *コメント [#h66dd779] バグ、リクエストなどがあったら教えてください。 -[[upk]] &new{2004-08-14 (SAT) 02:10:14}; ~中間階層のページが存在していない場合は、リンクしないで文字として階層を残すように表示するオプションって、できませんかね?特に、ページの有無に拘ってはいません。階層を正しく表示したいオプションなんですけどね。 -[[sonots]] &new{2004-08-14 (SAT) 13:18:57}; ~できると思います。それも迷ったんですよね。デフォルトの動作をどちらにしようか。その際にブラケットでくくった場合と同じように ? リンクをつける方法もあると思うのですが、ただのテキストにしたほうがいいでしょうか?オプション名を何にしましょう? -[[sonots]] &new{2004-08-14 (SAT) 18:34:06}; ~あ、思い出しました。元のコードが存在する1ページに対して1リスト(li)のようなコードだったので、1ページ複数リストにしようとすると大分手を加えないといけなくなりそうで、とりあえず辞めたのでした。またおそらく動作が重くなると思われます。気長に待っていてください(追記:学校が始まってしまったので本当に手を付ける暇がなさそうです。申し訳ないです。 9/3) -[[sonots]] &new{2004-08-14 (SAT) 21:57:09}; ~hierarchy以外のオプションも同時に指定したときはどういう動作を期待していますでしょうか? reverse はまた無視することになるとして、 #ls2_1(,2-,relative,hierarchy) は現在 -[[a/aa]] --[[aaa]] --[[a/bb/bbb]] --[[c/cc/ccc]] なわけですが(compactがないので少しわかりづらいですが)、 -[[a/aa]] --[[aaa]] -a/bb --[[bbb]] -c/cc --[[ccc]] のようになればよいですか?また、2-,hierarchy だけの場合は -[[test/a/aa]] --[[test/a/aa/aaa]] -test/a/bb --[[test/a/bb/bbb]] -test/c/cc --[[test/c/cc/ccc]] で、よいですか?この場合にわざわざ test/c/cc などを出す必要があるでしょうか?そういうオプションだと思ってしまえばそれまでですが。 -[[upk]] &new{2004-08-15 (SUN) 03:17:48}; ~わざわざ出す必要はないと思っています。イメージしているのは、Tree なんですけど -test --a ---[[aa>test/a/aa]] ----[[aaa>test/a/aa/aaa]] ---bb ----[[bbb>test/a/bb/bbb]] --c ---cc ----[[ccc>test/c/cc/ccc]] ~こんな感じなんですよね。仮想階層の1階層のみを表示して整理したイメージです。 -[[sonots]] &new{2004-08-15 (SUN) 12:58:23}; ~それはいいのですが、他のオプションと併用したときの動作をどうすればよいかです。upk さんの例は #ls2_1(test,relative,hierarchy,新しいオプション) のときの動作でそのようにさせるつもりです。私の書いた上の仕様でよろしいでしょうか? #ls2_1(test/,2-,hierarchy,新しいオプション) のときに test/c/cc もださないと一体どういう意味合いのオプションなのかわからなくなるのでやはり表示させることになると思います。 -[[sonots]] &new{2004-08-15 (SUN) 13:23:54}; ~それとも 2- にもかかわらず仮想的な一階層下のページ名 (test/c など) を出力させたいのでしょうか?他に実際に test/d のようなページがあった場合、2- なのでそのページはリストしないのですが、test/c/cc/ccc があるため test/c は出力するというよくわからないことになってしまいます。 -[[yananob]] &new{2004-08-21 (SAT) 00:51:39}; ~[[自作プラグイン]]からの一覧での表示が不正だったので、リビジョンを追加しました。 -このプラグインなかなかいいですね。使わせていただいています。オプションで「日付文字列yyyy-mm-dd」と「行数n」指定で「yyyy-mm-ddの日付のものからn件表示」という拡張は出来ないでしょうか。Blog2プラグインと併用したときにあると非常に便利だと思います。 -- [[jiji]] &new{2004-09-18 (土) 20:41:57}; -すみません。学校が始まってから死んでました。ちょうど pukiwiki.org 移転の時期だったのでコメントがいくつか消えているようです。確か upk さんの要望に関して時間がとれなくて今のところは本当に無理です。すみません。というのを書いたと思います。jiji さんの要望に関して今日だけこれから頑張ってみようと思います。カウンターいれるだけでできるはずですよね。-- [[sonots]] &new{2004-10-22 (金) 10:47:51}; -number= で件数を指定できるようにしました。こういうことでよいのですよね?あとアンケートの結果により、depth オプション指定時に数字だけでなく depth= をつけてもらうようにしました。今のところ下位互換性も考えて depth= がなくてもいままで通り depth オプションと判断されるようになっています。 -- [[sonots]] &new{2004-10-22 (金) 13:22:27}; -しばらく前から使わせてもらってます。number= での件数指定ができるようになって、より便利になりましたね。最初「10 と指定すると 10番目のリンク1つを表示するだけ」なのを見落としていて意図通りにできず悩んでしまいましたが……((ということで、余計なお世話ながらその辺の説明の箇所を強調表示してみました。))。&worried; &br;depth オプション指定時ですが、今後はdepth= 必須にしちゃってもいいんじゃないかなーと個人的には思います。 -- [[sagen]] &new{2004-10-30 (土) 13:40:49}; -calendar_viewerを使って日記の最新5件を表示させています。そのページの始まりに、日記のtitleの一覧をつけたくて利用させていただきました。number=1-5で一覧は出せるのですが、この方法だと一番古いものを5件呼び出してしまいます。これを最新にしたいのですが何か方法はありますでしょうか? -- [[ねこご]] &new{2004-11-01 (月) 16:53:08}; --試してませんが、reverseをつけてみては。 -- [[さばぞう]] &new{2004-11-01 (月) 18:19:12}; --reverseだと、呼び出した5件がリバースされるみたいです・・・・・。 -- [[ねこご]] &new{2004-11-01 (月) 22:26:36}; --なるほど。失礼しました。 -- [[さばぞう]] &new{2004-11-01 (月) 22:46:15}; --ページを降順で抽出するオプションdescendingを追加してみました。試してみてください。&ref(ls2_1.inc.php.diff); -- [[さばぞう]] &new{2004-11-02 (火) 13:33:19}; ---抽出後ソートされるので、出力を降順にするにはやはりreverseが必要です。 -- [[さばぞう]] &new{2004-11-02 (火) 13:40:29}; --ls2_1.inc.php.diffで思う通りに動きました。ありがとうございました。 -- [[ねこご]] &new{2004-11-02 (火) 16:03:25}; -title表示の表示件数を指定できたらうれしいです。 -- [[みず]] &new{2004-12-01 (水) 10:14:06}; --[[続・質問箱/471]] -- &new{2004-12-14 (火) 20:54:37}; -有用なプラグイン、ありがとうございます。一覧にNew表示を加えることはできませんでしょうか。 -- [[しか]] &new{2004-12-07 (火) 12:50:42}; -秋学期終了しました。というわけでそのうち機能追加してみようと思います。で、アンケート。3票入ったら着手するかも。~ ~ 1から5件までを表示したい場合、number=1-5 のような仕様になっているが、単純に number=5 のほうがいいか。現状のほうが機能は豊富なわけですが、number=2-10 のようにする人はいないような気がする。 #vote(number=5[2],number=1-5[0]) ''number=5 の仕様に変更しました。ご協力ありがとうございました。''~ たぶん number=5 の仕様になると、number=-5 で、上のさばぞうさんの descending オプションの機能を果たす仕様にすると思います。同時に reverse もすべき?ちなみに reverse と hierarchy の併用が怪しいので悩んでいます。 #vote(すべき[0],しないべき[2]) ''reverse はしないようにしました。ご協力ありがとうございました。''~ 要望の title の表示件数も指定できる機能を追加すべきか。 #vote(してくれ[1],いらない[1]) そうなるとまた、title 用とページ用の number オプションを分けるべきかという(べきだと思います)、compact と同じ問題が発生します。オプション名を変えるのが一番楽ですが、どうしましょう。title_number とか title_compact とかでいいですか?''ついでなので、title_number も追加しました。ご協力ありがとうございました。'' title オプションはいつも悩みの種です。そもそもページ名のリストに見出しのリストを加えて同時に表示している人はどのくらいいるのでしょう。 #vote(してる[0],してない[2]) もはや別々のプラグインにしてしまいたいぐらい。 ;-)。-- [[sonots]] &new{2004-12-16 (木) 10:18:54}; -あ、忘れてた。 New 表示はどうしようかな。 #vote(ぜひともつけてくれ[1]) 文字列処理だけですまないので調べるのちょっとめんどくさそう。 ''現在Newプラグインを利用しているので、日時も表示せざるを得ませんが、New表示機能つけました。ご協力ありがとうございました。''~ところで3票いかないですね。-- [[sonots]] &new{2004-12-18 (土) 09:54:06}; -お疲れ様でした :) -- [[でぃあばぁ]] &new{2004-12-19 (日) 08:27:53}; -ls2_1(連絡,title,depth=1,title_number=10)をSubMenuに書いてYahooのトピックスの用に利用しています。ありがとうございました。 -- [[みず]] &new{2004-12-21 (火) 17:33:18}; -New対応、ありがとうございました!早速利用させて頂きます。(3票いってないですが、どうもです...^^); -- [[しか]] &new{2004-12-21 (火) 18:31:11}; -更新日時順によるソート機能(新しいもの順)を追加しました。そのオプション名を new にして、日時表示オプションは date にしました。オプション名ころころ変えてすみません。 -- [[sonots]] &new{2004-12-26 (日) 23:00:55}; -アンケート。現在パターン指定はページ名先頭からの完全マッチ(#ls2_1(自作プラグイン/l)のような)だが、正規表現にしちゃったほうがいいか。正規表現にすると #ls2_1(^自作プラグイン/l) で現状と同じ意味になる。 #vote(今のままでいい[2],正規表現[0]) 正規表現のほうが機能は豊富だが、正規表現のわからない人にとって現状のものと同じ指定をするために毎回 ^ をつけるのが気持ち悪いのかもしれない。そもそも正規表現は初心者にやさしくない。おそらくそういう理由で今の仕様になっているのだと思う。また変更すると今まで ls2_1 を使用していた人は全員 ^ をつけるための修正をしなければならなくなる。-- [[sonots]] &new{2004-12-26 (日) 23:55:55}; #comment