admin: 2008年1月アーカイブ
件のブログ修正の際、トップページのみ、個別エントリーの表示を先頭の指定文字数のみ表示させて、後は [ ...続きを読む ] と表示させたい、というリクエストがあった。
それ自体は、まあ文字数指定のトリム処理で良く、また [ ...続きを読む ] 部分の表示もJavaScriptを使って以下のようにすれば、まあ可能だ。<$MTEntryBody words="600"$>
<script type="text/javascript">
var strNum = <mt:entrybody count_characters="1" />;
if(strNum >= 10){
document.write("...<br />");
var linkStr = "<p><a href='<$MTEntryPermalink$>'>続きを読む</a><br /></p>";
document.write(linkStr);
}
...
問題は、指定文字数でトリムする trim_to の場合、開始タグと閉じタグの不整合が生じる、また文字数指定の場合は
タグが除去されたプレインテキストのみの表示になってしまう、ということ。
プラグインを作成して、強引に開始タグと閉じタグを整合させる処理でも噛ませれば、希望レイアウトのままの文字数指定が可能だとは思うが...
作るの面倒くさそうだなぁ。
- まず、指定文字数でトリム
- 記事内の、なんの文字列をタグとして認識させるか
- それは開始タグ/終了タグのセットが必要なタグか
- 開始タグであれば、配列に保存
- 閉じタグがあれば、配列の末尾のタグと照合して、同一であれば配列から除去
- ※末尾のタグと合致しない場合、元記事内にタグの不整合がある⇒エラー処理
- 記事内の最後のタグより後ろに < があれば、実体参照に置き換え
- 配列内に残るタグを、後ろから順次読み出して、対応する閉じタグを追加
といったあたりか・・・。
久しぶりにMovableTypeを用いたブログサイトの修正依頼があったので、件のサイトのテンプレートをいぢってみた。
まあ、頂いたご要望はほとんどがスタイルシートに関する修正で対応可能な範囲で、プラスアルファでテンプレートを直すくらいで済む内容だったのだが・・・。
特定のエントリー(まあ、新年のご挨拶に関する記事)を、常にインデックスページのトップ画像下に表示させたい、ということで、エントリーの番号を指定して記事を呼び出す方法を考えて見たのだが、コマンドリファレンスを見ても、MTEntriesのアトリビュートにIDが無いようだ・・・。しからば、MTSetVarで設定してMTIfで呼ぶか・・・。
しかし、試行錯誤するも・・・失敗。どうにもEntryIDをSetVarのvalueにうまく入れることができない・・・。
表示順を変えてlastnや、limitを使って試すも、どうにもウマくいかない。
う~ん、困ったなぁ・・・。
で、ふと、こんな必要っぽい機能が無いなんて妙だよなぁ?と思い直し、MTEntriesにID指定を与えて見たら、おりょ?テンプレート保存時にエラーが出ない。構築もできている。メインページを表示させて見ると、なんだ動くじゃん!
・・・あれこれ試行錯誤した時間が・・・とほほ。
まあ勉強になりました。
