Metalsmith で記事の抜粋を作る
記事の内容から抜粋を作るにはプラグイン metalsmith-excerpts を使います。このプラグインはとてもシンプルな設計で、記事に最初に現れる <p> 〜 </p> タグを取り出してメタデータ excerpt として設定します。最初の段落で要約を書く執筆の流儀と相性の良いプラグインです。
インストール&設定
例によって npm
でインストールします。
$ npm install metalsmith-excerpts --save ... └── metalsmith-excerpts@1.2.0 ... $
index.js は 次のようになります。metalsmith-excerpts はオプションがないからと油断せず、実行順序に注意しましょう。このプラグインは metalsmith-collections と組み合わせて使うことがほとんどでしょう。その場合、metalsmith-excerpts は metalsmith-collections の前に実行する必要があります。また、metalsmith-markdown を使用している場合は、その後でなければなりません。
const excerpts = require('metalsmith-excerpts');
Metalsmith(__dirname)
...
.use(markdown())
...
.use(excerpts())
...
.use(collections({
posts: {
テンプレートでは、抜粋を表示したい部分に excerpt
を指定します。HTML
をエスケープしないように、{{{
〜 }}}
を使うのを忘れないようにしましょう。
...
{{#each collections.latest}}
<article>
<header>
<h2><a href="{{ this.path }}">{{ this.title }}</a></h2>
</header>
<section>
{{{ this.excerpt }}}
<div class="detail"><a href="/{{ this.path }}">続きを読む</a></div>
</section>
</article>
{{/each}}
...
抜粋の位置を指定したい場合
metalsmith-excerpts がシンプルすぎて、どうも合わないという場合は、metalsmith-better-excerpts を検討しましょう。こちらは、以下のように、<!-- more -->
までを抜粋と指定するという、割と良く見かける使い方ができます。
--- title: ○○○について --- ○○○ はあーで、こーで ここまで抜粋 <!-- more --> ここから下は全文表示のときに表示する。