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:参照したいコメントページ名]]

コメント

ソースコード

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

<?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: 2023-11-21 (火) 23:42:13
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.301 sec.

SourceForge