WriteToFileプラグインを使ったフォルダアーカイブの作成

Movable Type 4以降ではウェブページとフォルダの機能が導入され、ブログ的でない一般的なウェブページを管理することができます。
ただ、カテゴリにはカテゴリアーカイブがあるのに対し、フォルダのアーカイブを出力する機能がなぜかありません。

WriteToFileプラグインを使うと、擬似的にフォルダアーカイブを出力することができます。
その方法を紹介します。

1.考え方

テンプレートの中でMTSubFoldersタグのブロックを使うと、フォルダの一覧を出力することができます。
そこで、インデックステンプレートを1つ作り、MTSubFoldersタグのブロックの中にMTWriteToFileタグのブロックを入れ、フォルダごとに再構築結果をファイルに保存するようにします。
これによって、擬似的なフォルダアーカイブを作ることができます。

大まかなテンプレートの組み方は、以下のようになります。

<MTTopLevelFolders>
<MTSetVarBlock name="fname"><MTFolderPath>/index.html</MTSetVarBlock>
<MTWriteToFile file="$fname">
  ヘッダー等を出力する部分
  <MTPages>
    フォルダ内の各ページのタイトル等を出力する部分
  </MTPages>
  フッター等を出力する部分
</MTWriteToFile>
</SubFolderRecurse>
</MTTopLevelFolders>

2.作成例

例えば、Movable Type 4.2標準のテンプレートセットで、フォルダアーカイブとして、各フォルダのウェブページのタイトルを一覧表示できるようにしたいとします。
その場合、以下のような手順をとります。

2-1.インデックステンプレートの作成

まず、インデックステンプレートを1つ作成します。
テンプレートの名前は「フォルダアーカイブ」にします。

また、このインデックステンプレートは、WriteToFileプラグインでファイルを出力するためのもので、テンプレート自体の出力は不要です。
そこで、出力ファイル名は「dummy.dat」などにします。

2-2.メインページのテンプレートを貼り付け

2-1.で作ったインデックステンプレートに、メインページのテンプレートの内容をコピーして貼り付けます。

2-3.テンプレートの先頭と末尾にタグを追加

次に、テンプレートの先頭と末尾に、それぞれ以下のタグを追加します。

テンプレートの先頭に追加する部分
<MTTopLevelFolders>
<MTSetVarBlock name="fname"><MTFolderPath>/index.html</MTSetVarBlock>
<MTWriteToFile file="$fname">
テンプレートの最後に追加する部分
</MTWriteToFile>
<MTSubFolderRecurse>
</MTTopLevelFolders>

2-4.MTEntriesタグのブロックの書き換え

メインページのテンプレートには、以下のように、MTEntriesタグを使って最新のブログ記事一覧を出力する部分があります。

<mt:Entries>
                            <mt:Ignore><!-- Use the Entry Summary module for each entry published on this page --></mt:Ignore>
                            <$mt:Include module="ブログ記事の概要"$>
</mt:Entries>

この部分を以下のように書き換えます。

<mt:Pages>
  <mt:PagesHeader>
  <h1 class="archive-title"><$MTFolderLabel$>フォルダのページ</h1>
  <ul>
  </mt:PagesHeader>
    <li><a href="<$MTPagePermalink$>"><$MTPageTitle$></a></li>
  <mt:PagesFooter>
  </ul>
  </mt:PagesFooter>
</mt:Pages>

3.注意事項

ウェブページの数にほぼ比例して、このテンプレートの再構築時間も長くなります。
ウェブページの数が非常に多い場合、yujiro氏作のRebuildIndexFilterプラグインを使って、コメントやトラックバックを受信する時には、このテンプレートを再構築しないようにすることをお勧めします。