readingtime.inc.php

サマリ読了時間表示
リビジョン1.01
対応バージョン1.5.x
投稿者M.Taniguchi?
投稿日2019-08-03 (土) 01:08:17

概要

ユーザーがページを読むのに要するおおよその時間を表示するプラグイン。
1分未満は15秒単位、1分以上60分未満は分単位、60分以上は時間と分単位で表します。

時間は、ページ内の文字数を500(変更可)で割った値を1分とします。HTMLタグ・空白・改行は数えません。


出力例

このページは約 5分 で読めます。

使い方

  • #readingtime
  • #readingtime([文字数][,表示文言])
  • &readingtime();
  • &readingtime([文字数][,表示文言]);


引数

  • 文字数 … 1分間あたりにユーザーが読める文字数。一般に400~600程度とされる(デフォルトは500)
  • 表示文言 … 出力する文字列。%TIME% が読了時間に置換される


CSS

スキンCSSにおいて、次のセレクターで表示文言のスタイルを指定することができます。

  • 読了時間: .plugin-readingtime
  • 文言全体: .plugin-readingtime-message (※インラインでは出力されない)

コード

readingtime.inc.php

<?php
/*
PukiWiki - Yet another WikiWikiWeb clone.
readingtime.inc.php, v1.01 2019 M.Taniguchi
License: GPL v3 or (at your option) any later version

ユーザーがページを読むのに要するおおよその時間を表示するPukiWiki用プラグイン。
1分未満は15秒単位、1分以上60分未満は分単位、60分以上は時間と分単位で表します。
時間は、ページ内の文字数を500(変更可)で割った値を1分とします。HTMLタグ・空白・改行は数えません。

使い方:
#readingtime
#readingtime([文字数][,表示文言])
&readingtime();
&readingtime([文字数][,表示文言]);

引数:
文字数   … 1分間あたりにユーザーが読める文字数。一般に400~600程度とされる
表示文言 … 出力する文字列。%TIME% が読了時間に置換される

CSS:
スキンCSSにおいて、次のセレクターで表示文言のスタイルを指定することができます。
読了時間 … .plugin-readingtime
文言全体 … .plugin-readingtime-message
*/

// デフォルト文字数/分
define('PLUGIN_READINGTIME_PERMINUTE', 500);

// デフォルト表示文言
define('PLUGIN_READINGTIME_STRING', 'このページは約&thinsp;%TIME%&thinsp;で読めます。');
// デフォルト表示文言(インライン版)
define('PLUGIN_READINGTIME_STRING_INLINE', '%TIME%');


function plugin_readingtime_convert() {
	list($perMin, $str) = func_get_args();
	$perMin = (float)$perMin;

	$time = plugin_readingtime_gettime($perMin);
	$time = '<span class="plugin-readingtime">' . $time . '</span>';

	if (!$str) $str = PLUGIN_READINGTIME_STRING;
	$str = strip_htmltag($str);

	return '<p class="plugin-readingtime-message">' . str_replace('%TIME%', $time, $str) . '</p>';
}

function plugin_readingtime_inline() {
	list($perMin, $str) = func_get_args();
	$perMin = (float)$perMin;

	$time = plugin_readingtime_gettime($perMin);

	if (!$str) $str = PLUGIN_READINGTIME_STRING_INLINE;
	$str = strip_htmltag($str);

	return '<span class="plugin-readingtime">' . str_replace('%TIME%', $time, $str) . '</span>';
}

function plugin_readingtime_gettime($perMin = PLUGIN_READINGTIME_PERMINUTE, $space = '') {
	global $vars;

	$time = null;

	if (isset($vars['page'])) {
		$page = get_source($vars['page']);
		unset($page[0]);
		$page = implode($page);
		$page = preg_replace('(#readingtime(\([^\)]*\))*|\&readingtime(\([^\)]*\)(\{[^\}]*\})*)*;)', '', $page);
		$page = preg_replace('(&.+;|\s|\n|\r|\t)', '', strip_htmltag(convert_html($page)));

		if ($perMin <= 0) $perMin = PLUGIN_READINGTIME_PERMINUTE;
		$time = mb_strlen($page) / $perMin;

		if ($time <= 0.75) {
			$time = (ceil($time / 0.25) * 15) . $space . '秒';
		} else {
			if ($time < 60) {
				$time = ceil($time) . $space . '分';
			} else {
				$hour = floor($time / 60);
				$min = floor($time % 60);
				$time = $hour . $space . '時間' . $space . $min . $space . '分';
			}
		}
	}

	return $space . $time . $space;
}
?>
 

ダウンロード
https://misc.masatotaniguchi.jp/pukiwiki-plugins#h.p__piI4TVL-Qot

ライセンス

GPL v3


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-03 (土) 06:51:49
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.239 sec.

OSDN