カレンダーのリンク先を日付別アーカイブにしたとき,通常は最後の記事のタイトルがリンクのタイトルとなる。最後の記事だけでなく,その日のすべての記事のタイトルを表示させるようにする。
nlog(n): 日付別アーカイブへのリンク で,カレンダーのリンク先を日付別アーカイブに設定したのだが,ひとつ不満があった。カレンダーの日付にマウスを乗せたときに表示されるタイトルである。1日に複数の投稿がある場合,最後の記事のタイトルしか表示されない。複数の投稿があるのなら,すべてのタイトルを表示させたい。この問題は MTDateHeader と MTDateFooter で解決できる。
MTDateHeader は,日付が変わったときだけに内容を表示するコンテナタグである(日本語マニュアル)。このタグは,メインインデックスで日付の表示に使われている。同じ日に複数の投稿があっても,日付は最初の1つだけに表示されるようにしているのである。MTDateFooter も同様の機能を持つコンテナタグで,日付が変わったときに内容を表示する。MTDateHeader と違うのは,「最後に」表示するという点である。
カレンダーから日付別アーカイブへのリンクは,<$MTEntryPermalink$> に archive_type 属性を追加することで可能である。アンカータグ <a> には,リンク先のタイトルが分かるように title 属性を追加してある。この title 属性では,この日付の最後の記事のタイトルしか表示されない。タイトルを全て表示するためには,title="<$MTEntryTitle$>" の部分を <$MTEntryTitle$> の前後で分割し,前の部分は MTDateHeader で,後ろの部分は MTDateFooter で囲む。<$MTEntryTitle$> の直後には,複数のタイトルの区切りがわかるように「... 」を追加する。構造が分かりやすいように改行してインデントをつけて書いてあるが,1行で書かなければならない。
区切り方がかなり無理矢理なため,<MTDateHeader>〜</MTDateHeader> に含まれるダブルクォートの数が奇数になっていて気持ちが悪いが,意外にも上手くいく。
リンクを作るタグとして <$MTEntryPermalink$> を使っているが,代わりに <$MTEntryLink$> を使っても同様の結果が得られる。
RFC 1866 (rfc1866) - Hypertext Markup Language - 2.0 によれば,「title の長さに制限はないが,長すぎると途中で切られてしまうことがあるため,できれば 64 文字以内が望ましい」とされている。しかし,これはどんなブラウザで同じ表示にするための配慮のことを言っている。できるだけ多く表示できればいいので,気にしないことにする。
上のコードでは,タイトルの区切りに「... 」を使った。区切りはハッキリするが,記事が1つでもついてしまうという欠点がある。気になる場合は,Glue Plugin (Movable Type Plugin Directory: Glue) を使えば解決できるかも知れない。
2005年5月25日追記:
Vogorpants さんによれば,上で紹介した Glue プラグインで上手くいくそうです。
Master Archive Index
Total Entry Count: 1957
こんにちわ。コレはワタシも不満に思っている事のひとつでした。早速使わせていただきます。
Posted by: 198 at January 28, 2005 17:50すいません。TB連発してしまいました・・・。
Posted by: 198 at January 28, 2005 18:28お手数かけますが削除の方お願いします・・・。
無問題(ノーマンタイ)でござる。
Posted by: n at January 28, 2005 20:50こんばんわ!
Posted by: lomo at January 29, 2005 21:31198サンと同じでこのエントリーで長年(?)こうなったらいいのになぁーーっていう思いが解決しました!
TBもさせていただきました。
どうもありがとうございます!
Glue Pluginで解決できまね。こんな感じ。
Posted by: Vogorpants at May 25, 2005 23:35http://shikoshiko.nm.land.to/graphics/