複数ページ取り込み+表示順指定可能なinclude†
メッセージ†
指定階層以下のページを一括して取り込め、かつ除外ページの指定や表示の昇順/降順の指定が可能なプラグインはできませんか?
いずれかひとつが可能なプラグインは結構あるのですが…
欲しいプラグイン/74 にそれらしいものを見つけたのですが、古いincludeプラグインに対するパッチがあるのみでした。
対応バージョンを cvs:plugin/include.inc.php で探してみましたが見つけられなかったため、こちらに提案を出すことにしました。(見落としでしたらすみません)
よろしくお願いします。
欲しい機能
- 指定階層以下を一括include
- 除外ページを正規表現で指定
- includeしたページをタイトルの昇順/降順で表示
- 最大表示件数を引数で指定
あると嬉しい機能
コメント†
- 「指定階層以下を一括include」と「除外ページを正規表現で指定」は一つに
<?php
define(PLUGIN_PINCLUDE_MAX, 4);
require_once(PLUGIN_DIR.'include.inc.php');
function plugin_pinclude_convert()
{
list($r,$m,$st) = func_get_args();
$r = trim($r); $st = trim($st);
if( $r == '') return;
$m = $m>0 ? $m: PLUGIN_PINCLUDE_MAX;
foreach( get_existpages() as $p){
if(preg_match('/'.$r.'/', $p)) $pl[] = $p;
}
switch ($st) {
case 'rev':
rsort($pl); break;
case 'newer':
case 'older':
foreach($pl as $p) {
$ptl[$p] = get_filetime($p);
}
$st == 'older' ? asort($ptl): arsort($ptl);
$pl = array_keys($ptl);
break;
default:
sort($pl);
}
$m = min($m,count($pl));
for ($i=0; $i<$m; $i++) {
$s .= call_user_func('plugin_include_convert', $pl[$i]);
}
return $s;
}
?>
まとめられる項目ということで。--
- スルーみたいだけど、地味に軽量化。--
- 他の機能が欲しかったので試すのが後回しになってしまいました。すみません。ずいぶんincludeが便利になったように思います。ありがとうございました。この2つの機能は公式で標準にしてくれてもいいのになあとずっと思っていたので… --
- 「最大表示件数を引数で指定」以外なら拙作 自作プラグイン/lsx.inc.php でできると思います。とりあえずは incude.inc.php を編集して PLUGIN_INCLUDE_MAX を大きな値にしておけばそれも実現できるとは思います。将来的には最大制限をなくしたり、いろいろ機能をつけた includex を作る予定ですが、まだ構想が固まっていない状況です。 -- sonots
- 回答ありがとうございます。lsx.inc.phpは多機能で魅力的なのですが、できれば表示するページによって同一階層からincludeする件数を変えたいのです。具体的には一日に一ページずつ日記を書き、トップに最新のものを5件表示し、月ごとに別のページを作って該当月のディレクトリ以下の記事をすべてincludeする、ということをしたいので…既存のblogプラグインを使えばよいのでしょうが、更新日順でしか表示されないと古い記事を修正するのが大変で(^^;) --
- すみません、lsxを使用しますと(本来リストプラグインなので当然ですが)ページ名が表示されてしまいますので、やはりちょっと思っているのとは違うかと…細かくてすみません。 --
- includeオプション時はページリストは表示せずに連続 include だけするようになっているはずです。include する件数は #lsx(num=1:5,include) のように指定できます。num を指定しなければすべてになります。前述の通り include のほうで制限があるのでそこの修正は必要です。 -- sonots
- すみません、numオプションや「「最大表示件数を引数で指定」以外なら」というコメントを勘違いして受け取っておりました。ありがとうございます。 --
- lsx.inc.phpのページに書くべきか迷ったのですが、提案の続きということでこちらに書かせていただきます。#lsx(prefix=hoge/hogehoge/,include,reverse)として使いましたところ、hogehoge/以下のページ名リンクの下にページ内容が表示されるのですが、何か間違っているところがあるのでしょうか。includeおよびlsxの改変はしておりません。 --
- lsx.inc.php.3 以上ならページ名リンクは出ないです。「include オプション時に、通常リスト、contents リストを表示せずに include だけするように」ってやつです。 -- sonots
- すみません、includeのPLUGIN_INCLUDE_WITH_TITLEがTRUEになっていたせいでした。機能に不満がありinclude自体をほとんど使ったことがなかったため気がつくのが遅くなってしまいました。 --
- lsxで希望の動作はほぼ完璧に実現できましたので、ここで完了にします。本当にありがとうございました。 --