印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType カテゴリアーカイブを PHP で表示する

カテゴリアーカイブの表示に PHP を使う。個別に出力したファイルを動的に読み込んで表示する。

■ ■ ■

これまで,日別アーカイブ,月別アーカイブを PHP で表示するようにしてきた(nlog(n): 長年日記を PHP で実装するnlog(n): 月別アーカイブを PHP で表示する)。今回のターゲットはカテゴリアーカイブである。

環境は Movable Type 2.661, PHP 5.2.0 である。Movable Type については,MT2 だけでなく,MT3 でも動作する。ただし,MT3 にはダイナミックパブリッシングの機能がついているので,わざわざこのカスタマイズをするご利益はないかも知れない。PHP については,特殊な関数は使っていないので,PHP4 でも PHP5 でも動作する。テンプレートは既に作成されているとする(nlog(n): アーカイブの PHP 化の仕様を変更)。

カテゴリアーカイブテンプレートを編集し,<MTEntries>〜</MTEntries> を削除して,次のコードに置き換える。例によって,1つおきに色を変えるようにしている。

<?php
$count = 1;
$search = '<div class="blogbody year';
$replaceeven = '<div class="blogbody evenbody">';
$replaceodd = '<div class="blogbody oddbody">';
$thiscategory = '<$MTArchiveTitle encode_url="1"$>';
$files = glob("abstract/*" . $thiscategory . "*.html");
rsort($files);
foreach ($files as $file) {
  foreach (file($file) as $line) {
    if (ereg($search, $line)) {
      if ($count % 2) {
        echo $line = $replaceeven;
      } else {
        echo $line = $replaceodd;
      }
      $count++;
    }
    echo $line;
  }
}
?>

これで各アーカイブの PHP 表示については完了である。

結局,これらの違いはファイル選択の部分だけの違いに帰着される。

アーカイブ名 ファイル選択部分
日別 $thisday = '<$MTArchive Dateformat="%m_%d"$>';
$files = glob("abstract/????_" . $thisday . "*.html");
月別 $thismonth = '<$MTArchiveDate format="%Y_%m"$>';
$files = glob("abstract/" . $thismonth . "_*.html");
カテゴリ $thiscategory = '<$MTArchiveTitle encode_url="1"$>';
$files = glob("abstract/*" . $thiscategory . "*.html");

つまり,glob() 関数の引数が違うだけということになる。

Posted by n at 2007-04-09 23:03 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?