
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
















コメント
はじめまして。つるといいます。
記事通りやってみてとても素晴らしいと思ったのですが、
よくみると画像が表示されないのです。
画像も含めて規定文字数を表示させたいのですが
どうしたらよいですか?
よろしくお願いします。
tsuru | 2010年03月31日 17:19
コメントありがとうございます。
画像も含めるのはちょっと難しいですね。
画像は「続き」エリアに入力するなど、エリアを分けてしまったほうが実装が簡単かと思います。
よろしくお願いします。
ishida | 2010年04月05日 13:32
とてもわかりやすい説明で参考にさせていただきました。ありがとうございます。
ただいまMT5でブログ作成奮闘中です。
実は、その2の方法でやってみたのですが、本文中の改行タグが反映されずにすべて1行で表示されてしまいます。
remove_html="0" は、HTML タグを除去しないためのアトリビュートだと思うのですが、違うでしょうか?
大変恐縮なのですが、なにか解決のヒントを教えていただけたら幸いです。
こんぶ | 2010年09月14日 09:52
>こんぶさん
コメントありがとうございます。
お返事が遅くなってしま、すみません。
改行も反映したいということでしたら、
convert_breaksモディファイアも併用して、以下の記述でいけると思います。
<$MTEntryBody remove_html="0" trim_to="200">
今後ともバシャログ。をよろしくお願いします。
ishida | 2010年10月04日 20:02
すみません!お返事いただいていたのに気づいていませんでした。
すっかり諦めていたのですが、また挑戦してみます。
ありがとうございました。
こんぶ | 2010年12月17日 16:04