Movable Type の日別アーカイブを tDiary 風の長年日記にするカスタマイズを PHP で実装する。
このブログは作者の予想以上に長く続いてしまい,記事数は800を超えた。記事数の増加にともない,再構築に時間がかかるようになってきた。現在のサーバの CPU の周波数は 1 GHz だが,先日 200 MHz に落ちていた際には,全ての記事の再構築に 24 時間以上かかるという異常事態が発生。1つの記事の再構築でも10分以上かかるため,戻ってこなくなってしまった。しかし,よく考えてみれば Movable Type 2.661 ではこのくらいの記事数では問題ないはずである。問題は,再構築に時間がかかるようなカスタマイズを多くやってしまっているということだ。
再構築の時間を引き延ばしているカスタマイズは,日別アーカイブを tDiary 風にする「長年日記」である (nlog(n): Movable Type で長年日記)。このカスタマイズでは,1日分の日別アーカイブを再構築するだけのために,全ての記事の日付をチェックする。当然,記事が多くなればなるほど時間がかかるようになる。
そこで,多少不本意ではあるが,日別アーカイブを部品化して PHP で動的に読み込むように変更することにした。これまでは,記事はすべて静的に作ることにしていたので,PHP に頼るというのが不本意なのだ。しかし,背に腹は代えられない。背を腹に代えて,前も後も腹にしてしまえば背骨がなくなって背が縮むというスルドい手もあるが,そうなるともう何がなんだかで本末転倒なのでヤメ。
「長年日記」とは,前年以前の同じ日の日記を一度に参照できるページを生成する機能のことである(tDiary.org - 「長年日記」をmain trunkにマージ)。
環境は Movable Type 2.661 + 日本語パッチ(nlog(n): MovableType 2.661),PHP 5.2.0 である。ファイルの拡張子は .html のまま PHP スクリプトが動作するように設定しているが(nlog(n): 拡張子を変更せずに MT を PHP 化),これは本質に関係することではない。
前提条件としては,日別アーカイブと月別アーカイブのテンプレートを分けてあることである(nlog(n): Movable Type で長年日記)。以下では,日別アーカイブテンプレートを修正していく。
方針は次の通り。
日別アーカイブテンプレートから,MTEntries 部分を抜き出し,
抜き出したテンプレートからファイルを生成して,これを動的に読み込むようにする。
テンプレート名と生成されるファイル名との対応は以下の通りとする。
テンプレート名 | 生成したファイルの場所と名前 |
Daily Archive (表示用日別アーカイブテンプレート) |
archives/YYYY_MM_DD.html |
Daily Archive Abstract (部品用日別アーカイブテンプレート) |
archives/abstract/YYYY_MM_DD.html |
つまり,ファイル名の形式が決まっていれば,必要なファイルは PHP で簡単にピックアップできるという性質を利用する訳である。全ての記事の日付をチェックする必要はなくなり,再構築の時間が短縮される。部品化したファイルを月別アーカイブにも使えば,さらに再構築の時間は短くできる。
さらに細かくは,色付けの設定を次のように行う。具体的には,対象となっている年の blogbody クラスに,1つクラスを追加し色づけすることにする。表示用の日別アーカイブでは,複数年の同じ日付の記事が並ぶことになる。それらの記事のうち,対象となる年の色だけを変更する。方針としては,各部品に「yearYYYY」の形のクラスをつけておき,表示をする際にこのクラスの名称を変更する。対象となる年のクラスを「thisyear」クラスにし,他の年の「yearYYYY」クラスは削除する。
部品用の日別アーカイブを新規に作成する。これまで使っていた日別アーカイブの <MTEntries> から </MTEntries> までをコピーし,アーカイブとして保存する。テンプレートの名前は何でもよく,例えば「Daily Archive Abstract」としておく(本文のうち,概要(abstract)だけが書かれているという意味)。
blogbody の div には次のように書いておく。
再構築すると,「<div class="blogbody year2007">」などとなる。
テンプレートの修正が終わったら,このテンプレートを日別アーカイブとして関連付ける。「ブログの設定」→「アーカイブの設定」で,アーカイブファイルのテンプレートを「Daily」として追加し,「アーカイブファイルのテンプレート」欄には「abstract/<$MTArchiveDate format="%Y_%m_%d.html"$>」と書いておく。アーカイブを再構築すると,archives/abstract/2007_03_20.html」などの静的ファイルが生成される。
スタイルシートを修正して,色づけのための thisyear クラスを追加する(nlog(n): Movable Type で長年日記)。
これは thisyear のような色である。
生成されたファイルが読めるかどうかを,簡単なコードでテストする。表示用日別アーカイブテンプレートを開き,削除した MTEntries の部分に次のコードを書いて再構築する。色づけのことを考えなければ,このコードでよい。
正しく表示できることを確認したら,上のコードを本番のコードで置き換える。
再構築して,色づけができていることを確認すれば完了である。
yearYYYY クラスの色を決めて,削除せずに残していくというバリエーションもある。
スタイルシートには,yearYYYY クラスを書いておく。例えば,thisyear, year2004, year2005, year2006, year2007 のようなグラデーションにするという手もある。
年の色というのを決めて,サイト全体で統一するというのもいいかも。
Posted by n at 2007-03-20 22:59 | Edit | Comments (0) | Trackback(1)
Master Archive Index
Total Entry Count: 1957