下記のブログを読んで某ブログのテンプレートを書き換えました。
グローバル・モディファイアを使いこなそう
ブログの記事を書いたとき、その記事の概要を書く部分があります。Movable Typeだと「概要」です。「記事の作成」または「記事の編集」画面の下の方にあります。
でも、実際には使っていないです。全くと言っていいほど使っていません。概要ですからその記事の要約を入力すればいいのですが、正直なところ面倒くさくて...。
とは言え、場合によっては概要的なものを掲載したい場合があると思います。
上の画像のようにカテゴリーアーカイブでエントリー一覧を表示させたとき、ある程度の内容が分かるようにしたい場合もあると思います。そんなときに使うのが概要ということになると思いますが、先ほどのように概要は書いてません。
概要は書いていないので、テンプレートには下記のように書いてEntryBodyから80文字を切り取って表示させています。
<mt:Entries>
<$mt:EntryBody words="80" remove_html="1"$>
</mt:Entries>
ただし、この書き方ですとEntryBodyが80文字以上だと良いのですが、80文字に満たないとスペースが空いてしまいます。
そこで、先ほどのグローバル・モディファイアを使いこなそうを参考に、もし、EntryBodyが80文字に満たない場合、EntryMoreから足りない文字数分を追加するようにしました。
まずは準備としてEntryBodyとEntryMoreの文字数、足りない文字数を変数に代入するようにします。
EntryBodyとEntryMoreの文字数を変数に代入
<mt:SetVars>
body_count=<$mt:EntryBody remove_html="1" count_characters="1"$>
more_count=<$mt:EntryMore remove_html="1" count_characters="1"$>
</mt:SetVars>
続いて足りない文字数をチェックします。
まずは最大文字数の80文字をセット
<mt:SetVar name="remaining_num" value="80">
80文字からEntryBodyの文字数をマイナスして「remaining_num」に足りない文字数をセット
<mt:SetVar name="remaining_num" value="$body_count" op="-">
次に実際にHTMLに書き出す部分の編集です。
EntryBodyの文字数が80文字以上の場合と、
そうではない場合で書き出す内容を変えています。
<mt:If name="body_count" ge="80">
EntryBodyの文字数が80文字以上の場合
<$mt:EntryBody words="80" remove_html="1"$>...
<mt:Else>
EntryBodyの文字数が80文字に満たない場合
EntryBodyを全部書き出す
<$mt:EntryBody remove_html="1"$>
さらにEntryMoreから足りない文字数分を書き出す
「words="$remaining_num"」で「remaining_num」に
設定された文字数を指定しています。
<$mt:EntryMore words="$remaining_num" remove_html="1"$>...
</mt:If>
これでテンプレートの編集は終了です。再構築するとテキストが80文字なかったところはテキストが追加されます。