MTEntryExcerpt タグの本文からの自動生成について整理してみた

MTEntryExcerpt タグの本文からの自動生成について、なんとなく整理してみました。 MTEntryExcerpt タグは、記事の「概要」欄の値を出力するファンクションタグですが、「概要」欄に値がない場合は、本文欄から自動で概要文を作成して表示してくれます(デフォルト設定は40文字)。 - [MTEntryExcerpt | テンプレートタグリファレンス](http://www.movab...

MTEntryExcerpt タグの本文からの自動生成について、なんとなく整理してみました。

MTEntryExcerpt タグは、記事の「概要」欄の値を出力するファンクションタグですが、「概要」欄に値がない場合は、本文欄から自動で概要文を作成して表示してくれます(デフォルト設定は40文字)。

ちなみに、自動生成しないようにする場合には、no_generate="1" を指定すればOKです。

さて、今、本文欄に下記のテキスト(エディタは「改行を変換」)が入っていて、概要欄は空だとします。全角文字が45文字あり、<br>を含めると49文字です。

アイウエオ<br>カキクケコ

あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめも

Point 1 : 自動生成では改行コードは置換され、HTMLタグは除去される

このサンプル記事について、下記のテンプレートタグで出力される値を見てみます。

【テンプレートタグ】

<mt:EntryExcerpt>

【出力結果】

アイウエオカキクケコ あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへ...

このように、全角39文字と半角スペース1つ(カタカナの後ろ)の計40文字が出力されました。

本文欄からの自動生成では、改行コード(\r\nや\n)は半角スペースに変換され、HTMLタグは除去されます。連続する改行コードはまとめて1つのスペースになります。

Point 2 : convert_breaks は効かない

自動生成された概要文には convert_breaks モディファイア(1を設定すると改行を変換)は効きません。だって、HTML タグは除去されてしまうので。

【テンプレートタグ】

<mt:EntryExcerpt convert_breaks="1">

【出力結果】

アイウエオカキクケコ あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへ...

Point 3 : 文字数変更はブログの投稿設定か words モディファイアで

自動生成の概要文の文字数は、デフォルトでは40文字です。これを変更するときは、ブログの投稿設定の「概要の文字数」を変更するか、words モディファイアを指定します。

【テンプレートタグ】

<mt:EntryExcerpt words="20">

【出力結果】

アイウエオカキクケコ あいうえおかきくけ...

Point 4 : 改行やHTMLタグを活かしたい場合

改行を活かしたい場合は自動生成の概要文ではダメなので、以下のようなテンプレートタグで EntryBody を書き出したら良いと思います。

【テンプレートタグ】

<mt:EntryExcerpt no_generate="1" setvar="entry_excerpt">
<mt:Unless name="entry_excerpt">
 <mt:EntryBody remove_html="1" trim_to="20+..." regex_replace="/\r?\n/g","<br>">
</mt:Unless>

【出力結果】

アイウエオカキクケコ<br><br>あいうえおかきく...

そして、HTMLタグについては指定した文字数で切れるところがちょうどHTMLタグの途中だと表示が崩れてしまうので、やはり remove_html="1" で除去した方が良いと思います。

おまけ : 自動生成概要文の...を変えたい

自動生成概要文の最後につく...を変えたい場合は、

Path-to-mt/lib/MT/Template/Tags/Entry.pm

の中の1722行目付近の以下のコードをカスタマイズすれば良いと思います。

return $excerpt . '...';

以上です。

Published 2014-07-03
Updated 2019-06-25

「Movable Type」カテゴリの記事一覧