2003年11月22日 (土)

カレンダーをどのページでも表示するために

以前の「iBlog の出力の各種間違いを補正するために」で紹介したカスタマイズ CommonLib.js の WriteCalendar を使用するにあたって、blog のトップページ以外でカレンダーを表示させないという制限があったが、これを解消した。

カスタマイズした CommonLib.js を新たにダウンロードして今までのものと置き換えればよい。でも、blog が置かれるディレクトリによっては WriteCalendar に引数を与える必要があるので、一応最後まで目を通してほしい。

WriteCalendar 関数の中で、そのページの URL から BlogPage, ArchivePage, YearPage, DayPage, CategoryPage, EntryPage のどれから呼び出されたかを識別して、適切なカレンダーが出力されるようになっている。

ただし若干の制約がある。それはその blog トップページより上のパスが ArchivePage, YearPage, DayPage, CategoryPage, EntryPage が置かれているパスとよく似たパターンになっているときは WriteCalendar に引数を与えてあげなければならないという制約だ。正規表現を知っている人ならばソースを見てもらえればわかるが、次のようにしてどのページかを判断している。
'/C{数字が一つ以上}/E{数字が一つ以上}/{何かファイル名}' で終わる URL
EntryPage と看做す
'/{C数字が一つ以上}/{何かファイル名}' で終わる URL
CategoryPage と看做す
'/20{数字が二つ}/{1から12までの数}/{1から31までの数}/{何かファイル名}' で終わる URL
DayPage と看做す
'/20{数字が二つ}/{何かファイル名}' で終わる URL
YearPage と看做す
'/archive.html' で終わる URL
ArchivePage と看做す
その他
BlogPage と看做す

このため例えば、http://your.server.com/C12/ が blog 置き場だとすると、本当は BlogPage なのに CategoryPage だと思われてしまう。これを防止するために今まで WriteCalendar(); と書いていたところを WriteCalendar('http://your.server.com/C12'); と書かなければいけない。C12 の後ろに / を付けないことに注意。そういうケースでなければ今まで通りでよい。

iBlog の出力では archive.html 以外は全て index.html が XHTML ファイルのファイル名になっている。だから上の {何かファイル名} の部分は index.html でもよいのだが、例えば「html ファイルを shtml に変更するプラグイン」のようにファイル名を変えるような操作がしてあった場合に当て嵌まらなくなってしまうから index.html と名指しはしていない。archive.html は例外的に名指しにしているが、ArchivePage は BlogPage と同じディレクトリに置かれるので、BlogPage としてのカレンダーでも差し支えないはずだ。

というわけで、これで XHTMLファイル群とその CSS、非公開 blog の Login.html、RSS Feed に対する Validate が終わった。今までのエントリで強調してこなかったが、文法的間違いを直したテンプレートセットと日本語化した Login.html は、それぞれ日本語化したテンプレートセットと文法的間違いを直した Login.html になっている。RSS Feed も RSS Validator が OK を出すようにしただけでなく日本語がきちんと UTF-8 になるようにした。つまり Validate と日本語化の両方が終了した。

Posted: 04:21    | Comment | Trackback


以下、類似エントリです。