スタティック/ダイナミックパブリッシングの共存を考える(その2)

「スタティック/ダイナミックパブリッシングの共存を考える」の第2回をお送りします。
今回は、ページ毎に出力する情報が違うようなスタティック専用プラグインの情報を、ダイナミックパブリッシングのページに組み込む方法を解説します。

例えば、以下のような状況を考えてみます。

  • 拙作のSuperSortプラグインを使っている
  • 個々のブログ記事のページに、並び順を指定した後の前後のブログ記事へのリンクを出力したい

前後のブログ記事へのリンクは、MTSortedEntryPrevious/MTSortedEntryNextタグで出力することができます。
ただ、このタグの出力内容は、ブログ記事毎に異なります。
また、MTSortedEntryPrevious/MTSortedEntryNextタグは、ダイナミックパブリッシングには対応していません。
この場合のスタティック/ダイナミックの共存を例にします。

1.アーカイブテンプレートを作る

まず、ページ毎に出力が違う部分を、アーカイブテンプレートで出力するようにします。
そして、アーカイブテンプレートの内容として、出力したい部分だけを入れます。

今取り上げている例では、ブログ記事毎に、前後の記事へのリンクを出力を得たいです。
したがって、ブログ記事毎に違う出力を得る必要がありますので、ブログ記事アーカイブテンプレートを作成します。
テンプレートの内容は、以下のようなものが考えられます。

<mt:SortedEntryPrevious>
  <a href="<$mt:EntryPermalink$>">前の記事(<$mt:EntryTitle$>)</a> |
</mt:SortedEntryPrevious>
<a href="<$mt:BlogURL$>">メインページ</a>
<mt:SortedEntryNext>
  | <a href="<$mt:EntryPermalink$>">前の記事(<$mt:EntryTitle$>)</a>
</mt:SortedEntryNext>

また、テンプレート名は「前後のブログ記事」にでもしておくと良いでしょう。
テンプレートを入力し終わったら、いったん保存します。

2.アーカイブマッピングを作る

次に、1.で作ったテンプレートから、ブログ記事毎にファイルが出力されるように、アーカイブマッピングを作ります。

テンプレートの編集のページで、「テンプレートの設定」の部分を開き、「新しいアーカイブマッピングを作成」のリンクをクリックします。
すると、アーカイブマッピングを選ぶ状態になりますので、「種類」の欄で「ブログ記事」を選び、「追加」ボタンをクリックします。

アーカイブマッピングの作成

アーカイブマッピングが作成されたら、「パス」の欄で選択肢の最後にある「カスタム」を選びます。
すると、アーカイブマッピングのパスを自由に入力できる状態になりますので、ブログ記事毎にファイルが出力されるように、適切にパスを決めます。
パスに使える文字は、Movable Typeのヘルプの「アーカイブマッピングで利用するアーカイブファイル名の定義」のページを参照してください。

今取り上げている例では、前後のブログ記事へのリンクを出力します。
そこで、「nextprev」というディレクトリの中に、「エントリーのID.html」のようなファイル名で、ファイルを出力することにします。
それには、パスの設定を「nextprev/%E.html」にします。

アーカイブマッピングのパスを「nextprev/%E.html」に設定する

ここまでが終わったら、「変更を保存する」のボタンをクリックし、テンプレートを保存します。
そして、ブログ記事アーカイブを再構築して、今作ったテンプレートに沿ってファイルを出力します。

3.ファイルを読み込む

次に、ダイナミックパブリッシングにしているテンプレートを書き換えて、ここまでで作ったスタティックなファイルを読み込むようにします。

前回と同様に、MTIncludeタグにfileモディファイアを指定して、ファイルを読み込みます。
ただ、前回とは違って、ブログ記事毎に読み込むファイルが変化します。
そこで、あらかじめファイル名を変数に代入しておいて、MTIncludeタグのfileモディファイアにはその変数を指定します。

アーカイブマッピングのパスの設定に応じて、ファイル名を生成するには、「MTFileTemplate」というテンプレートタグを使います。
「format」というモディファイアに、アーカイブマッピングのパスに指定した文字列をそのまま書きます。

今取り上げている例だと、アーカイブマッピングのパスの設定を「nextprev/%E.html」にしていました。
そこで、ブログ記事アーカイブテンプレートの中で、前後の記事へのリンクを出力したい位置に以下のように書きます。

<$mt:FileTemplate format="nextprev/%E.html" setvar="filename"$>
<$mt:Include file="$filename">

1行目のMTFileTemplateタグで、「filename」という変数に、ファイル名を代入します。
そして、2行目のMTIncludeタグで、ファイルを読み込みます。

4.パターンによってテンプレート/アーカイブマッピングの作り方は違う

今取り上げている例では、ブログ記事毎に違う出力が必要なので、ブログ記事アーカイブテンプレートを作りました。
しかし、それ以外の場合は、状況に応じて作るテンプレートを変える必要があります。

例えば、カテゴリ毎に違う出力を得たい場合は、まずブログ記事リストアーカイブテンプレートを作ります。
そして、そのテンプレートにカテゴリのアーカイブマッピングを追加して、カテゴリ毎の出力を得られるようにします。