#author("2020-01-08T17:58:38+09:00","","") #author("2020-04-25T17:19:44+09:00","","") ** readingtime.inc.php [#wb4d1f1a] |RIGHT:100|LEFT:360|c |~サマリ|読了時間表示| |~リビジョン|1.01| |~対応バージョン|1.5.x| |~リビジョン|1.02| |~対応バージョン|1.5.2| |~投稿者|[[M.Taniguchi]]| |~投稿日|&new{2019-08-03 (土) 01:08:17};| **概要 [#y55b86bf] ユーザーがページを読むのに要するおおよその時間を表示するプラグイン。&br; 1分未満は15秒単位、1分以上60分未満は分単位、60分以上は時間と分単位で表します。 時間は、ページ内の文字数を500(変更可)で割った値を1分とします。HTMLタグ・空白・改行は数えません。 1分未満は15秒単位、1分以上60分未満は分単位、60分以上は時間と分単位で表します。~ 時間は、ページ内の文字数を500(変更可)で割った値を1分とします。~ 高速化のため文章以外の文字も区別せずに数えてしまうので、あくまで目安と考えてください。 &br;''出力例'' このページは約 5分 で読めます。 このページは約 5分 で読めます。 **使い方 [#kb667366] -&readingtime; -&readingtime([文字数][,表示文言]); -#readingtime -#readingtime([文字数][,表示文言]) -&readingtime(); -&readingtime([文字数][,表示文言]); &br;''引数'' #br -文字数 … 1分間あたりにユーザーが読める文字数。一般に400~600程度とされる(デフォルトは500) ''引数'' -文字数 … 1分間あたりにユーザーが読める文字数。日本語の場合、一般に400~600程度とされる(デフォルトは500) -表示文言 … 出力する文字列。%TIME% が読了時間に置換される &br;''CSS'' #br ''使用例'' このページは約&readingtime;で読めます。 #br ''スタイル'' スキンCSSにおいて、次のセレクターで表示文言のスタイルを指定することができます。 -読了時間: .plugin-readingtime -文言全体: .plugin-readingtime-message (※インラインでは出力されない) **コード [#f7aeb3a2] readingtime.inc.php~ (下記のコードをコピーして、plugin ディレクトリに readingtime.inc.php というファイル名で保存してください) <?php /* PukiWiki - Yet another WikiWikiWeb clone. readingtime.inc.php, v1.01 2019 M.Taniguchi readingtime.inc.php, v1.02 2019 M.Taniguchi License: GPL v3 or (at your option) any later version ユーザーがページを読むのに要するおおよその時間を表示するPukiWiki用プラグイン。 ユーザーがページを読むのに要するおおよその時間を表示するプラグイン。 1分未満は15秒単位、1分以上60分未満は分単位、60分以上は時間と分単位で表します。 時間は、ページ内の文字数を500(変更可)で割った値を1分とします。HTMLタグ・空白・改行は数えません。 時間は、ページ内の文字数を500(変更可)で割った値を1分とします。 高速化のため文章以外の文字も区別せずに数えてしまうので、あくまで目安と考えてください。 使い方: 【使い方】 &readingtime; &readingtime([文字数][,表示文言]); #readingtime #readingtime([文字数][,表示文言]) &readingtime(); &readingtime([文字数][,表示文言]); 引数: 文字数 … 1分間あたりにユーザーが読める文字数。一般に400~600程度とされる 文字数 … 1分間あたりにユーザーが読める文字数。日本語の場合、一般に400~600程度とされる 表示文言 … 出力する文字列。%TIME% が読了時間に置換される CSS: スキンCSSにおいて、次のセレクターで表示文言のスタイルを指定することができます。 【使用例】 この記事は約&readingtime;で読めます。 【スタイル】 スキンCSSにおいて、次のセレクターで表示時間および文言のスタイルを指定することができます。 読了時間 … .plugin-readingtime 文言全体 … .plugin-readingtime-message */ // デフォルト文字数/分 define('PLUGIN_READINGTIME_PERMINUTE', 500); // デフォルト表示文言 define('PLUGIN_READINGTIME_STRING', 'このページは約 %TIME% で読めます。'); // デフォルト表示文言(インライン版) 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))); $text = ''; foreach ($page as $row) if (strpos($row, '#') !== 0) $text .= $row; $page = preg_replace('(&.+;|\s|\n|\r|\t)', '', $text); 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 . '分'; $time = number_format($hour) . $space . '時間' . $space . $min . $space . '分'; } } } return $space . $time . $space; } ?> **ライセンス [#od005e98] GPL v3