recentcomment.inc.php

サマリページ内の最近のコメントを抽出・ソート
リビジョン0.03
対応バージョン1.4.4-1.4.6rc
投稿者Cue
投稿日2005-06-02 (木) 17:41:56

概要

#pccomentをreply付きで運用している場合、短時間に多数のコメントが寄せられると時系列が追い難くなるので作りました。
このような状況になるのは稀だと思いますが…。

ライセンス

GPLでお願いします。

インストール

  1. ダウンロードしたファイルを plugin ディレクトリに配置
  2. InterWikiName に以下のようなエントリを追加
    -[./?cmd=recentcomment&page=$1 RecentComment]

使い方

適当なページに以下のようなリンクを設置します。

[[新着コメントを参照>RecentComment:参照したいコメントページ名]]

コメント

  • 1.4.6rcで動作確認とっただけで何も変更はありません。 -- Cue 2005-07-05 (火) 17:13:12
  • 最新版の1.4.7で使用しようと思ったところ新着コメントがありませんという表示しかされませんでした。日付の表記が問題のようだったので最新版に会わせて一部変更して使わせていただきました。勝手ながら変更部分を載せさせていただきます。不都合がある場合は再編集をよろしくお願いします。 -- a.ohkubo? 2007-10-31 (水) 15:38:08

ソースコード

添付できませんのでソースコード張ります。

<?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)
	);
}
?>

pukiwiki1.4.7に合わせての変更点

ソースコード中の
  if(!preg_match('/^-{1,3}.+&new\{(.+)\};$/', $data, $matches)) continue;
上記の部分を変更して
  if(!preg_match('/([0-9]+-[0-9]+-[0-9]+)/',$data,$matches)) continue;
このようにしたら動作しました。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-09-22 (水) 22:21:15
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.687 sec.

OSDN