本文の文字数が多い時にだけ「続きを読む」を挿入する方法-MovableType

本文の文字数が多い時にだけ「続きを読む」を挿入する方法-MovableType

イメージ

MovableTypeで記事本文のトリム処理をする際に、いろいろやってみたので備忘録としてエントリ。

やりたいコトは以下の通りです。

・アーカイブページで、個別記事本文のアタマから指定文字数分だけを表示させる
・指定文字数を超えていたら「…続きを見る」を表示
・「…続きを見る」にはパーマリンクを張る
・エントリ画面の本文入力フォーマットはリッチテキスト

その1 Javascriptでやってみる

まずはJSで。

<p>
<$MTEntryBody remove_html="0" trim_to="100"$>
<script type="text/javascript">
var charaNum = <$MTEntryBody count_characters="1"$>;
if(charaNum >= 100){
var url = "<a href='…<$MTEntryPermalink$>'>続きを読む</a>";
document.write(url);
}
</p>

ただコレだとJSをoffに設定されていたらダメ。

ページの先頭へ

その2 MTSetVarでなんとかする

それではMTの条件分岐タグで。

<p>
<MTSetVarBlock name="charaNum"><$MTEntryBody count_characters="1"$></MTSetVarBlock>
<$MTEntryBody remove_html="0" trim_to="100"$>
<MTIf name="charaNum" gt="100">…<a href="<$MTEntryPermalink$>">続きを読む</a></MTIf>
</p>

コレでいけます。
個人的にはちょっとコードがスッキリしない気がします(MTだからしょうがないケド…)。

ページの先頭へ

その3 もうpmファイルをいじくる

こうなったらもう調子にのってMTのソースを変更してしまいます。

MTDIR/lib/MT/Template/ContextHandlers.pmの776行目あたり

sub _fltr_trim_to {
my ($str, $val, $ctx) = @_;
return '' if $val <= 0;
$str = substr_text($str, 0, $val) if $val < length_text($str);
$str;
}

↑コレを↓このように変更します。

sub _fltr_trim_to {
my ($str, $val, $ctx) = @_;
my $e = $ctx->stash('entry');
my $url;
$url = $e->permalink;
$str = substr_text($str, 0, $val).'…<a href="'.$url.'">続きを読む</a>' if $val < length_text($str);
$str;
}

この方法だとテンプレート自体はとってもシンプルに。

<p><$MTEntryBody remove_html="0" trim_to="100"$></p>

スッキリです。

C-brains nagai

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ