月別アーカイブリストの年月選択時、カレンダーもその選択された年月を表示させるカスタマイズです。
カレンダーがcookieを使って、表示する月を保持している事が条件です。うちの場合は、小粋空間さんの「月送りカレンダー状態保持スクリプト」が施されていますが、カスタマイズ次第ではどの場所のリンクでも同期が可能になるかと思います。
まず、Javascriptを追加。bodyタグ内でも、METAダグの中へ外部リンクを張っても大丈夫です。小粋空間さんのカスタマイズを参考にしていますが、Cookieで保持しているのであれば、カレンダーテンプレートのCookie書き込みScriptをそのまま利用すればいいと思われます。
<script type="text/javascript">
function setCalendarMonth(value) {
valuex = value.slice(32,39);
var name = "blogCalendar";
expires = "";
document.cookie = name+"="+valuex+expires+"; path=/";
}
</script>
3行目について。文字列の32文字目から39文字目までの間を抜き出す。と言う設定です。
プルダウンメニューに使われている<$MTArchiveLink$>というMTタグを使用している為、URLの中から年月の文字列だけを取り出しています。
「http://www.msf-net.com/archives/2007/06/index.php」というリンクであれば、32文字目から39文字目までの「2007/06」という文字列を抜き出しているワケです。なので、自分のアドレスによって変更する必要があります。
6行目でカレンダーの月保持設定のcookieへ上書きをします。
そして、月別アーカイブリストのリンクURLである<$MTArchiveLink$>に
onChange="setCalendarMonth(value)"
と、プルダウンメニューの<select>タグ中に追記すれば完了です。
「selectUrl(this.form.select)」と並列にしても可能です。
また、普通のリンクの場合は、
onChange="setCalendarMonth(href)"
にして<a>タグに追記しましょう。
自分で説明してて、混乱してきたw
要するに、カレンダーの機能であるcookieを使って表示する月を保持させている部分に対して、月別アーカイブリストの年月選択をした時に、cookieを上書きしてやれば、カレンダーと月別アーカイブが同期する。という仕組み。ただ、トップページへ戻る時に、カレンダーがリセットされなかったり、まだまだ改善の余地ありかも。
最初は同期をとる方法をあちこち探したのに、結局みつからず、自分で作る事になっちまったw
Cookieはexpires値を省略すると、ブラウザを終了するまで保持され、終了すると削除されます。次回に訪れた時、カレンダーはリセットされた状態であるほうがいいと思い、現在ではexpires値は省いてあります。
再度訪れた時にカレンダーが2000年01月だった…なんて事になりますから!
最近のコメントやエントリーリストなどの月が変わる可能性があるリンクに適用すれば、カレンダーもその月に変わります。検索結果のテンプレートも忘れやすいので気をつけましょう。
≪ 続きを隠す