[Movable Type] Movable Type に関する設定のメモなど

長年日記

Last Update: 2004--0-6- (Thu) 08: 1

tDiary 風に、去年やその前の年の同じ日のデータを表示出来るようにしてました。Movable Type を日記風に使ってる人ってどのくらい居てどのくらい需要があるのかわからないけど、自分用のメモを兼ねるという事で以下やり方。

ModRewrite と PHP が必要。

Movable Type の2.6系は使った事がないので、3.0系でしか使えないのかもしれません。MT 自体もまだ使い始めたばかりであまり慣れていないので、もっとスマートなやり方があるような気がします。気が付いたら教えて下さい。

まず始めにアーカイブに関連したテンプレートの作成。管理メニューのテンプレートから、「新しいアーカイブ・テンプレートを作る」をクリックして作りましょう。名前は何でもいいです。私は Naganen Archive にしました。

内容は、<MTEntries> から </MTEntries> までの一日分のみ。ちなみに、うちの場合の設定は こんな感じ

次に、日別のアーカイブの設定。管理メニューのウェブログの設定から「アーカイブの設定」をクリック。アーカイブの種類は日別を選択し、テンプレートはさっきの Naganen Archive を選択して追加。

日別アーカイブを新たに使うように設定して、「アーカイブ・ファイルのテンプレート」は適当にこんな感じに設定。

date/<$MTEntryDate format="%m%d/%y"$>.php

ここまででデータの準備が完了です。次は実際に表示する際に使用する PHP の作成。

管理メニューのテンプレートに戻って、インデックス・テンプレートの追加。

名前は適当に Naganen Base とでも名付けましょう。出力ファイル名は archives/date/index.php とします。中身は Date Based Archive でもコピーしてきて下さい。

そして、先頭行の前に以下を追加

<?
   $date = $_GET['date'];

   if(!ereg("^[0-9]{4}$", $date) or !is_dir($date)) {
      exit();
   }
   $dir = dir($date);
?>

<div class="content"> から </div> までの間(MTEntry に該当する部分かな?)を以下と差し替え。

<?
   while(($ent = $dir->read()) !== FALSE) {
      if(!ereg("^\.", $ent)) {
         $list[] = $ent;
      }
   }
   sort($list);
   foreach($list as $ent) {
      include("$date/$ent");
   }
?>

ここまで終わったら、一度日別アーカイブを再構築して動作チェックをしましょう。再構築すると archives/date とうディレクトリが出来ているはずなので、そこに .htaccess を設置。

RewriteEngine on
RewriteBase /archives/date
RewriteRule ([0-9]{4})\.html$ index.php?date=$1

http://espion.just-size.jp/archives/date/0526.html 等の URL にアクセスして、過去の同日の記事の一覧が表示されれば成功です。

最後にインデックス・テンプレートの Main Index 等に、[長年日記] としてリンクを付ければめでたく長年日記の完成です。

今回は面倒だったので、前日・翌日のリンクは付けませんでしたがそれ程難しくないので誰か挑戦して下さいまし。

Posted by Kyosuke Takayama at 2004-06-08 (Tue) 11:02 printable version

この記事へのコメント

コメントはお気軽にどうぞ

Cookie に保存しますか?


・スパム対策のため、http:// を含むコメントの投稿は出来ません。
・スパムチェックのため、投稿がすぐに反映されない場合があります。
・メールアドレス入力欄には何も入力しないでください。

トラックバック

トラックバックURL: http://espion.just-size.jp/mt-tb.cgi/110


この記事のリンク元

 
Copyright (C) Kyosuke Takayama, All rights reserved.