サマリ | ページ内の最近のコメントを抽出・ソート |
---|---|
リビジョン | 0.03 |
対応バージョン | 1.4.4-1.4.6rc |
投稿者 | Cue |
投稿日 | 2005-06-02 (木) 17:41:56 |
#pccomentをreply付きで運用している場合、短時間に多数のコメントが寄せられると時系列が追い難くなるので作りました。
このような状況になるのは稀だと思いますが…。
GPLでお願いします。
-[./?cmd=recentcomment&page=$1 RecentComment]
適当なページに以下のようなリンクを設置します。
[[新着コメントを参照>RecentComment:参照したいコメントページ名]]
添付できませんのでソースコード張ります。
<?php // PukiWiki - Yet another WikiWikiWeb clone. // // recentcomment.inc.php // // 2005/06/01 v0.01 // とりあえず作る // // 2005/06/01 v0.02 // 対象ページのチェック追加 // 同一タイムスタンプのコメントが複数あるときの対策 // // 2005/06/02 v0.03 // 件数の表示追加 // 設定項目を作る // // // 何時間前のコメントまで表示するか(単位:時間) define('PLUGIN_RECENTCOMMENT_LIMIT', 24); // // 表示方向(降順:krsoort, 昇順:ksort) define('PLUGIN_RECENTCOMMENT_SORTFUNC', 'krsort'); // // メッセージの設定 define('PLUGIN_RECENTCOMMENT_MSG_FOUND', "%d件の新着コメントがあります\n"); define('PLUGIN_RECENTCOMMENT_MSG_NOTFOUND', "新着コメントはありません\n"); define('PLUGIN_RECENTCOMMENT_MSG_TITLE', '$1 の最近%d時間のコメント'); function plugin_recentcomment_action() { global $vars, $_title_invalidwn, $_msg_invalidiwn; $page = $vars['page']; if (!is_page($page)) { return array( 'msg'=>$_title_invalidwn, 'body'=>str_replace('$1', htmlspecialchars($page), str_replace('$2', 'WikiName', $_msg_invalidiwn)) ); } check_readable($page, false, true); $limit = 60 * 60 * PLUGIN_RECENTCOMMENT_LIMIT; $comments = $matches = array(); $lines = get_source($page); foreach($lines as $data){ if(!preg_match('/^-{1,3}.+&new\{(.+)\};$/', $data, $matches)) continue; $timestamp = strtotime($matches[1]); if(UTIME - ($timestamp - ZONETIME) <= $limit){ @$comments[$timestamp] .= preg_replace('/^-{1,3}/', '-', $data); } } eval(PLUGIN_RECENTCOMMENT_SORTFUNC . '($comments);'); $comments = explode("\n", implode('', $comments)); $count = count($comments) - 1; array_unshift($comments, $count ? sprintf(PLUGIN_RECENTCOMMENT_MSG_FOUND, $count) : PLUGIN_RECENTCOMMENT_MSG_NOTFOUND); return array( 'msg'=>sprintf(PLUGIN_RECENTCOMMENT_MSG_TITLE, PLUGIN_RECENTCOMMENT_LIMIT), 'body'=>convert_html($comments) ); } ?>
ソースコード中の
if(!preg_match('/^-{1,3}.+&new\{(.+)\};$/', $data, $matches)) continue;
上記の部分を変更して
if(!preg_match('/([0-9]+-[0-9]+-[0-9]+)/',$data,$matches)) continue;
このようにしたら動作しました。