ブログ記事のタイトルやブログ記事の本文の「最初の20文字」を切り出すというのは、ブログ記事の一覧やパンくずリストなどで使用されるので、ご存じの方も多いと思います。
●先頭の▲▲文字を切り出す「trim_to」
グローバルモディファイアの「trim_to」を使用します。
<$mt:EntryTitle trim_to="20"$> <$mt:EntryTitle trim_to="20+…"$>
上はブログ記事のタイトルの先頭20文字を表示、下は20文字を超える部分は「…」と追加して表示という意味です。
ブログ記事の本文なら以下の通りになります。グローバルモディファイアの「remove_html="1"」で、ブログ記事の本文からHTML記述を削除した後、「strip_linefeeds="1"」で改行を削除してから指定した文字数を切り出します(そうしないとタグだけで終わってしまうこともある)。
<$mt:EntryBody remove_html="1" strip_linefeeds="1" trim_to="20"$> <$mt:EntryBody remove_html="1" strip_linefeeds="1" trim_to="20+…"$>
では、逆にブログ記事のタイトルやブログ記事の本文の「末尾から20文字」を切り出すのはどうしたらよいでしょうか?
なお、グローバルモディファイアの「trim_to」にマイナスの値を入れても、末尾からの切り出しにはなりません。
Movable Type 6.0.4 以降では、N に負の値を指定した場合は、文字列の末尾から N 文字取り除き、残った部分を取り出します。例えば、trim_to="-5" と指定すると、"サンプルの文章です" という文章は、"サンプル" と表示されます。
trim_to -(グローバル・モディファイアリファレンス)
●正規表現を使って対応「regex_replace」
ブログ記事のタイトルやブログ記事の本文の「末尾から20文字」を切り出すには、末尾から文字数をカウントしなくてはいけませんが、あいにく標準ではそのようなグローバルモディファイアはありません。
このため、正規表現の置換ができるグローバルモディファイア「regex_replace」を使用して対応します。
<$mt:EntryBody remove_html="1" strip_linefeeds="1" regex_replace="/.*(.{20})$/","\1"$>
正規表現で$は行末を意味します。
strip_linefeeds="1"で内容が1行になっているので、末尾からの文字をマッチできます。
「.{20}」で任意の文字20文字がマッチするので、そこだけ出力されるようにしています(それより前の文字は捨てています)。
グローバルモディファイアだけを使っているので、当然普通の変数でも末尾の何文字を切り出して出力することもできます。
以下の例は変数「contents」の末尾100文字だけを出力するテンプレートコードです。
<$mt:GetVar name="contents" remove_html="1" strip_linefeeds="1" regex_replace="/.*(.{100})$/","\1"$>
●用途
それにしてもブログ記事の最後の何文字かを出力するなんて、どんな用途なのか?とお思いの方もいらっしゃるでしょう。かなり特殊ですよね。
わかりやすい例で言うと、ちきりんさんのブログの最後にいつも入っている「そんじゃーね」が各ブログ記事にキチンと入っているかを確認する…といった用途で使用します。(私とちきりんさんのブログは何の関係もありません)
ブログ記事に定型句が最後に入るはずなのに、入ってないブログ記事を探すためと言ったら良いでしょうか。
今回使用したグローバルモディファイア「regex_replace」は正規表現が使用できるので、非常に強力です。
まだ使ったことがない方は、上手に活用してみましょう。
それでは、よいMovable Typeライフを。