Category:カレンダー

2007年 06月 08日(金曜日) 08時 51分

カレンダーのリセット

 昨日のカスタマイズで、トップページに戻る場合、カレンダーが最新のものにならなかったので、解決策として単純にcookieを削除するコトにしました。

 Web制作支援サイト eWebさんの「クッキーの削除」を参考にしました。name値を変更するだけで動きます。あとは、

onClick="deleteCookie()"

 これをトップに戻るリンクに追記するだけです。

※Iflameを使っていると、カレンダーの表示が更新された後はブラウザにカレンダーのキャッシュが出来てしまうので、ブラウザの「戻る」を利用するとカレンダーの履歴が表示されてしまいます。すぐに前ページ(エントリー)を表示させたい場合はAjax版カレンダーを使うと解決します。個人的には今の仕様が嫌いではなかったりしますけど。

2007年 06月 07日(木曜日) 14時 15分

月別アーカイブリストとカレンダーの同期

 月別アーカイブリストの年月選択時、カレンダーもその選択された年月を表示させるカスタマイズです。

 カレンダーが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

2006年 05月 23日(火曜日) 22時 36分

休日表示付月送りカレンダー

はいはい。毎度の小粋空間さんのカレンダーよりいただきました。

この中の「休日表示付リアルタイムカレンダー for Movable Type」と「月送りカレンダー」と「月送りカレンダー・1日に表示されなくなる不具合を改善」、更にスタイルシートには「リンクをマウスオン時にずらす」を使い、スタイルシートのリンク色変更とエントリーのある日付に下線を引いてみました。これでもか!って言うくらいのカスタマイズをさせていただきましたw

しかし、どうも不具合が時々でますね…。
カレンダーを新規に生成する時に休日スクリプトがおかしいのか、日付が全部真っ黒になっているページが作られる時があります。謎です…。

結局、カレンダーを表示させるのに1日がかりだったです…。