GRAV の公式プラグインに Reading Time というのがあります。
たまに見かける「この記事を読むのにかかる時間は~分です。」みたいなことを実現するためのプラグインです。
無くてもまったく困らない機能ですが、あるとなんだかカッコイイ気がします(そうでもない?)。
ということでつけてみました( ゚Д゚)
使い方は簡単です。
使用しているテーマのテンプレートを編集して、所要時間を表示させたい箇所に
{{ page.content|readingtime }}
のコードを追加するだけ。
当サイトではBoostrap4テーマを使ってます。表示させたい箇所はBlog記事一覧のページなので
[gravインストール先]/user/themes/boostrap4/templates/partials/blog_item.html.twig
上記ファイルに追記することになります。
File: [gravインストール先]/user/themes/boostrap4/templates/partials/blog_item.html.twig
~~~
{% if page.header.continue_link is same as(false) %}
<p>{{ page.content|raw }}</p>
{% if not truncate %}
{% set show_prev_next = true %}
{% endif %}
{% elseif truncate and page.summary != page.content %}
<p>{{ page.summary|raw }}</p>
<p><a href="{{ page.url }}">Continue Reading...</a></p>
{% elseif truncate %}
{% if page.summary != page.content %}
<p>{{ page.content|truncate(550) }}</p>
{% else %}
<p>{{ page.content|raw }}</p>
{% endif %}
{% if page.summary.enabled %}
<p><a href="{{ page.url }}">Continue Reading...</a></p>
{% endif %}
{% else %}
<p>{{ page.content|raw }}</p>
{% set show_prev_next = true %}
{% endif %}
~~~
各記事の概要が表示された場合に「Continue Reading...」のリンクが表示されるようになっているので、その横にReading Time を表示させ(追記し)ます。
File: [gravインストール先]/user/themes/boostrap4/templates/partials/blog_item.html.twig
~~~
{% if page.header.continue_link is same as(false) %}
<p>{{ page.content|raw }}</p>
{% if not truncate %}
{% set show_prev_next = true %}
{% endif %}
{% elseif truncate and page.summary != page.content %}
<p>{{ page.summary|raw }}</p>
<p><a href="{{ page.url }}">Continue Reading...</a><span class="float-right">{{ page.content|readingtime }}</span></p>
{% elseif truncate %}
{% if page.summary != page.content %}
<p>{{ page.content|truncate(550) }}</p>
{% else %}
<p>{{ page.content|raw }}</p>
{% endif %}
{% if page.summary.enabled %}
<p><a href="{{ page.url }}">Continue Reading...</a><span class="float-right">{{ page.content|readingtime }}</span></p>
{% endif %}
{% else %}
<p>{{ page.content|raw }}</p>
{% set show_prev_next = true %}
{% endif %}
~~~
これで完了です。
サイトに戻って確認してみると、きちんと所要時間が表示されています。
「0 minutes, 43 seconds」とか「0 minutes, 12 seconds」とかありえない時間が表示されちゃってます。
いやいやいや、いくら内容が薄い記事だからって秒で読めるとかないでしょうよ。 いじめか?泣くぞ(´・ω・`)
うーん、これはあれだ。たぶん日本語に対応してない(文字数とかのカウントが2バイト文字を考慮してない)とかその辺の問題じゃなかろうか。
ということで、プラグインの中身を確認しました。
File:[GRAVインストール先]/user/plugin/readtime/classes/TwigReadingTimeFilters.php
~~~
$words = count(preg_split('/\s+/', strip_tags($content)) ?: []);
~~~
うん。完全に英語表記(もしくはそれに準じた言語)しか考慮されてないですね。
File:[GRAVインストール先]/user/plugin/readtime/classes/TwigReadingTimeFilters.php
~~~
// $words = count(preg_split('/\s+/', strip_tags($content)) ?: []);
$words = mb_strlen(strip_tags($content));
~~~
改造って程でもないですね。そのまんまですし(´・ω・`)。
ないとは思いますが、マルチバイト関連の関数(mb_で始まる関数)が使用しているphpに入っていない場合は使えません。
これで大体、正確な時間が表示されるようになりました。
Reading Time プラグインの設定項目に関して。
私の場合、記事内容を見て判断するタイプなので、どれくらいかかるかとかはあまり気にせず記事を開いてます。
なので所要時間の表示がどれほど需要があるのか微妙ですが、まあものは試しなので ( ゚Д゚)。
大した負荷ではなくてもページ生成過程で余分な処理が増えるので、将来的には外してしまうかもしれません。
Last edited: 2024-07-31 02:05