Movable Type で年別アーカイブを作ったり、全記事一覧を年ごとに分けたりするテンプレート

http://hxxk.jp/2005/12/20/2151

記事データ

投稿者

真琴

投稿日時

2005-12-20T21:51+09:00

タグ
概要

Movable Type では、デフォルトでは年別のアーカイブは作成されません ( 作成できません ) 。しかし、フォーマットの関係上 yyyy/ というディレクトリが存在するため、年別のアーカイブは作った方が良いでしょう。そこで、年別のアーカイブの作成方法と、合わせて全記事の一覧を年ごとに分ける方法を紹介します。

リプライ

4 件のリプライがあります。

記事本文

Movable Type の年別アーカイブの解説をしてみよう

昨日はヴァルシュタイナーを飲んだ後に釈云麦をロックでいただいていたので、日付が変わる頃にはすっかり良い気分になりました。 そんな折に IRC チャンネル #hxxk にて drry さん ( drry+@->Weblog ) に年別アーカイブに関する質問を受け、後日回答しますと言っていたのでちょっと解説してみます。 なお、環境は Movable Type 3.2-ja-2 を想定していますので、それ以外の言語のものや古いバージョンのものをお使いの場合は適宜解説を読み替えてください。

Movable Type ではデフォルトでは年別アーカイブは作られない

先日 Movable Type 3.2 の Archive File Path 形式のフォーマットと実際の出力フォーマットの早見表にて、デフォルトでの URI 設計について触れました。 エントリアーカイブの場合は yyyy/mm/entry_basename.html 、日別アーカイブの場合は yyyy/mm/dd/index.html 、月別アーカイブの場合は yyyy/mm/index.html のようになっています。 しかし、 yyyy/index.html のようなフォーマットで生成される年別アーカイブはありません。

そのために、 yyyy/ のディレクトリにアクセスしても、 403 Forbidden となってしまうか、あるいはディレクトリ内のリソースが全て丸見えになってしまうといったことになってしまいます。 ( サーバ側の設定によりますし、人によってはわざとディレクトリを丸見えにすることで年別アーカイブ代わりにしているケースもあるでしょうが、あまりスマートではありません。 )

年別アーカイブを作る - プラグインの導入

実際のテンプレートソースを紹介する前に、プラグインの導入をお願いします。 デフォルトでは年別アーカイブが作られないということは、標準のテンプレートタグでは実現できないことと近似ですゆえ。

必要なプラグインは ArchiveYear Plugin と ArchiveLoad Plugin の 2 つなのですが、現在は作者のサイト自体が 404 Not Found のようです。 Junkline - MT の過去ログリンク表示を nDiary (ごにょり済み)風にという記事にプラグインのミラーが置かれていますので、そこから入手して plugins フォルダに put してください。

なお、Junkline - MT の過去ログリンク表示を nDiary (ごにょり済み)風にや、そこから辿ることができる Chitatopops: 年別アーカイブにてテンプレートソースの実例が書かれているため、これら 2 つの記事を見ていただくだけでも年別アーカイブは実現できますが、せっかくなので次項以降では hxxk.jp でのソースを紹介していこうと思います。

年別アーカイブを作る - テンプレートの作成

年別アーカイブを作る場合、まずはテンプレートから作成します。 Movable Type の管理画面から「テンプレート」→「アーカイブ」→「テンプレートを新規作成」とクリックしていき、次のソースを参考にしてテンプレートを作成します。 テンプレートの名前は任意で構いませんが、年別アーカイブであるということが分かりやすい名前にしてください。

<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="<$MTDefaultLanguage$>" xml:lang="<$MTDefaultLanguage$>">

<head profile="http://purl.org/net/ns/metaprof">
  <meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>">
  <meta name="generator" content="Movable Type <$MTVersion$>" />
  <meta name="description" content="<$MTBlogName encode_html="1" remove_html="1"$> の <$MTArchiveDate format="%Y"$> 年の記事タイトル一覧" />
  <title><$MTBlogName encode_html="1" remove_html="1"$> - <$MTArchiveDate format="%Y"$> 年アーカイブ</title>
  <link rel="stylesheet" href="<$MTBlogURL$>styles-site.css" type="text/css" />
  <MTArchiveYearPrevious><link rel="prev" href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y/"$>" title="<$MTBlogName encode_html="1" remove_html="1"$> - <$MTArchiveDate format="%Y"$> 年アーカイブ" /></MTArchiveYearPrevious>
  <MTArchiveYearNext><link rel="next" href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y/"$>" title="<$MTBlogName encode_html="1" remove_html="1"$> - <$MTArchiveDate format="%Y"$> 年アーカイブ" /></MTArchiveYearNext>
</head>

<body>

<h1><a href="<$MTBlogURL$>"><$MTBlogName encode_html="1" remove_html="1"$></a></h1>

<h2><$MTArchiveDate format="%Y"$> 年アーカイブ</h2>

<ol>
  <MTArchiveYear order="descend">
    <MTArchiveYearIfEntries>
      <MTArchiveLoad>
        <MTDateHeader>
          <li><a href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y/%m/"$>" title="<$MTBlogName encode_html="1" remove_html="1"$> - <$MTArchiveDate format="%Y 年 %m"$> 月アーカイブ"><$MTArchiveDate format="%Y 年 %m"$> 月アーカイブ</a>
            <ol>
              <MTEntries sort_order="descend">
                <li><$MTArchiveDate format="%Y/%m/%d" %H:%M"$> - <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
              </MTEntries>
            </ol>
          </li>
        </MTDateHeader>
      </MTArchiveLoad>
    </MTArchiveYearIfEntries>
  </MTArchiveYear>
</ol>

</body>

</html>

少し変更を加えていますが、 hxxk.jp - 2005 の内容と同じような形式のテンプレートです。 その年の月別アーカイブおよび記事の一覧にリンクするようなアーカイブです。

年別アーカイブを作る - テンプレートの関連付け

次に、テンプレートの関連付けを行います。 Movable Type の管理画面から「設定」→「公開」→「マッピングを新規作成」とクリックしていき、「アーカイブの種類」は月別を選択し、「テンプレート」は先ほど作成した年別アーカイブテンプレートを選択します。

関連付けをした後に、出力フォーマットをカスタマイズします。 先ほど関連付けをしたテンプレートの横のプルダウンメニューをクリックし、「カスタマイズする」を選び、 %y/%i と記述してください。 ( Movable Type 3.2 以前のバージョンをお使いの場合、あるいは Archive File Path 形式を好まない場合は <$MTArchiveDate format="%Y"$>/<$MTIndexBasename$><$MTBlogFileExtension$> と記述してください。 )

出力フォーマットまで設定したら、あとは月別アーカイブを再構築して完了です。 以後、月別アーカイブを再構築する時、または記事を投稿および更新する時に年別アーカイブも更新されることになります。

応用編 - 全記事一覧を年ごとに分ける

ついでに、年別アーカイブのソースを利用して、全記事一覧を年ごとに分ける方法を紹介します。 hxxk.jp - 記事目次がそのまま実例になりますが、今度はインデックステンプレートの方に手を加えることになります。 ( 新たに作成しても構いませんし、「アーカイブページ」のテンプレート ( Master Archive Index ) に適用しても構いません。 )

<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="<$MTDefaultLanguage$>" xml:lang="<$MTDefaultLanguage$>">

<head profile="http://purl.org/net/ns/metaprof">
  <meta http-equiv="Content-Type" content="text/html; charset=<$MTPublishCharset$>">
  <meta name="generator" content="Movable Type <$MTVersion$>" />
  <meta name="description" content="<$MTBlogName encode_html="1" remove_html="1"$> の全記事アーカイブ" />
  <title><$MTBlogName encode_html="1" remove_html="1"$> - 全記事アーカイブ</title>
  <link rel="stylesheet" href="<$MTBlogURL$>styles-site.css" type="text/css" />
</head>

<body>

<h1><a href="<$MTBlogURL$>"><$MTBlogName encode_html="1" remove_html="1"$></a></h1>

<h2>全記事アーカイブ</h2>

<ol>
  <MTArchiveList archive_type="Monthly">
    <MTArchiveDateHeader>
      <li><a href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y/"$>" title="<$MTBlogName encode_html="1" remove_html="1"$> - <$MTArchiveDate format="%Y"$> 年アーカイブ"><$MTArchiveDate format="%Y"$> 年アーカイブ</a>
        <ol>
          <MTArchiveYear order="descend">
            <MTArchiveYearIfEntries>
              <MTArchiveLoad>
                <MTDateHeader>
                  <li><a href="<$MTBlogArchiveURL$><$MTArchiveDate format="%Y/%m/"$>" title="<$MTBlogName encode_html="1" remove_html="1"$> - <$MTArchiveDate format="%Y 年 %m"$>月アーカイブ"><$MTArchiveDate format="%Y 年 %m"$>月アーカイブ</a>
                    <ol>
                      <MTEntries sort_order="descend">
                        <li><$MTArchiveDate format="%Y/%m/%d %H:%M"$> - <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
                      </MTEntries>
                    </ol>
                  </li>
                </MTDateHeader>
              </MTArchiveLoad>
            </MTArchiveYearIfEntries>
          </MTArchiveYear>
        </ol>
      </li>
    </MTArchiveDateHeader>
  </MTArchiveList>
</ol>

</body>

</html>

こちらはインデックステンプレートになるため、記事を投稿および更新する時に更新されることになります。

リプライ

4 件のリプライが送られています。

2007-02-17T21:54+09:00 - 季節ごとのアーカイブ < オラオラ

mixiのMTコミュで質問のあった季節別アーカイブの作成を、導入したまま使用するタイミングを待っていたプラグインで実現してみた。

2007-04-28T11:50+09:00 - ハンドル可

エントリー一覧を年毎に区切って一括で出力できないかと思って、こちらのサイトにたどり着きました。 悪戦苦闘すること4時間以上。 MTArchiveDateHeaderってデフォルトのタグじゃなくて、プラグインの機能なんですね。。。 お時間あるときにでも加えておいてもらえると報われます。。。。

2007-05-27T16:40+09:00 - MT3.2で月別アーカイブを年別に区切って表示 < ネコの為に鈴は鳴る。 - After☆Taste Blog

MT3.2-ja-2でどんどん縦長になっていく月別アーカイブを年別に区切ってすっきり表示するカスタマイズを実装してみた。

2007-07-14T16:49+09:00 - 年別アーカイブの作成 < せんむの屋根裏部屋

年別のバックナンバーをサイドバーに表示させるとともに、年をクリックすると年別アー...

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など