[PHP] PukiWikiで新しく更新したページのリンクを表示するプラグイン

2017年7月24日(更新: 2017年8月4日)

PukiWiki内の更新日時が新しいページのリンクを並べて表示するプラグインです。通常の更新履歴とは別に、ページの一部に最近更新したページの一覧を組み込みたい場合のためのプラグインです。

実際の使用例は以下のようになります(「最近の更新された用語」というラベルはプラグインとは別に作成されたものです)。

PukiWikiで最近更新したページのリンクを一覧表示するプラグイン

プラグインのPHPスクリプト

プラグインの全スクリプトです。recent.inc.php を元としています。

<?php
// $Id: recent.inc.php,v 1.27 2011/01/25 15:01:01 henoheno Exp $
// Copyright (C)
//   2002-2007 PukiWiki Developers Team
//   2002      Y.MASUI http://masui.net/pukiwiki/ masui@masui.net
// License: GPL version 2

// 2016-2017 JoyPlot

// プラグインの使い方
define('PLUGIN_RECENT_USAGE', '#recent_in_page(number-to-show)');

// 最近の更新を記録したファイル
define('PLUGIN_RECENT_CACHE', CACHE_DIR . 'recent.dat');

function plugin_recent_in_page_convert() {

	// 各リンクにつける右側の余白
	$rightMarginOfItem = 16;

	// デフォルトの表示件数
	$showLineCount = 10;

	if (func_num_args()) {

		$args = func_get_args();

		if (!is_numeric($args[0]) || isset($args[1])) {
			// 呼び出し方が正しくない時は正しい使い方を表示する
			return PLUGIN_RECENT_USAGE . '<br>';
		} else {
			// 第一引数から表示件数を読み込む
			$showLineCount = $args[0];
		}
	}

	if (!file_exists(PLUGIN_RECENT_CACHE)) {

		put_lastmodified();

		if (!file_exists(PLUGIN_RECENT_CACHE)) {
			return '#recent(): Cache file of RecentChanges not found' . '<br>';
		}
	}

	// Get latest N changes
	$lines = file_head(PLUGIN_RECENT_CACHE, $showLineCount);

	if ($lines == FALSE) {
		return '#recent(): File can not open' . '<br>' . "\n";
	}

	$baseURL = get_script_uri();

	$stylesheet = 'display: inline-block; margin-right: ' . $rightMarginOfItem . 'px;';

	$output = '<div class="recentList">';

	foreach ($lines as $line) {

		$data = explode("\t", rtrim($line));

		if (count($data) != 2) {
			continue;
		}

		$page = $data[1];

		$s_page = htmlsc($page);
		$r_page = pagename_urlencode($page);
		$output .= '<span style="' . $stylesheet . '"><a href="' . $baseURL . '?' . $r_page . '">' . $s_page . '</a></span>';
	}
	$output .= '</div>';

	return $output;
}

プラグインの使用方法

上記のスクリプトを recent_in_page.inc.php という名前で plugin ディレクトリ内に保存してください。

その後、使用したいページに以下のように記述します。

#recent_in_page(表示するページリンクの数);

引数を省略した場合のデフォルトの表示リンク数は10です。細かいプラグインの動作は、用途に合わせて改変してください。

コメントを残す

メールアドレスが公開されることはありません。