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

10月5日の「スタティック/ダイナミックパブリッシングの共存を考える(その3)」の続きで、テンプレートの変数を使って、スタティックパブリッシングからダイナミックパブリッシングに情報を渡す例を紹介します。

事例として、その2の記事で行った「SuperSortプラグインで並べ替えた後の前後の記事の出力」を、変数で行うことを取り上げます。

1.スタティックの情報を変数に代入するテンプレート

まず、スタティックの情報(SuperSortプラグインで並べ替えた後の前後の記事の情報)を、ダイナミック側で扱えるように、変数に代入する処理を作ります。

前後の記事の情報は、個々のブログ記事毎に異なります。
そこで、ブログ記事アーカイブテンプレートを作り、その中に変数に代入する処理を入れます。
実際にテンプレートを作ると、以下のようになります。

<?php
global $mt;
$ctx = $mt->context();
$vars =& $ctx->__stash['vars'];
<mt:SortedEntryPrevious>
$vars['sorted_entry_previous'] = 1;
$vars['sorted_entry_previous_permalink'] = "<$mt:EntryPermalink encode_php="qq"$>";
$vars['sorted_entry_previous_title'] = "<$mt:EntryTitle encode_php="qq"$>";
</mt:SortedEntryPrevious>
<mt:SortedEntryNext>
$vars['sorted_entry_next'] = 1;
$vars['sorted_entry_next_permalink'] = "<$mt:EntryPermalink encode_php="qq"$>";
$vars['sorted_entry_next_title'] = "<$mt:EntryTitle encode_php="qq"$>";
</mt:SortedEntryNext>
?>

1~3行目では、ダイナミックパブリッシングの変数に値を代入するための準備を行っています(その3の記事を参照)。
5~9行目では、以下の表にように、各変数に値を代入する処理を行っています。
ただし、前の記事がない場合は、各変数には何も代入しません。

変数内容
sorted_entry_previous1
sorted_entry_previous_permalink前の記事のアドレス
sorted_entry_previous_title前の記事のタイトル

同様に、10~14行目では以下の通り各変数に値を代入します。
ただし、次の記事がない場合は、、各変数には何も代入しません。

変数内容
sorted_entry_next1
sorted_entry_next_permalink次の記事のアドレス
sorted_entry_next_title次の記事のタイトル

なお、「encode_php="qq"」というモディファイアは、テンプレートタグの値を、PHPの文法に沿って、ダブルクオーテーションで囲んだ文字列として正しい値にする働きをします。

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

テンプレートを作ったら、いったんそのテンプレートを保存した後、アーカイブマッピングを作成します。
アーカイブマッピングの作成手順は、その2の記事で紹介した通りです。
ただし、アーカイブマッピングのパスは「nextprev/%E.php」にします。

3.ブログ記事アーカイブテンプレートに変数を組み込む

次に、ブログ記事アーカイブテンプレートに、1のテンプレートで出力されるファイルを組み込んで、変数を使えるようにします。

それには、その2の記事と同じように、ブログ記事アーカイブテンプレートに以下のような部分を入れます。

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

4.前後の記事へのリンクを出力する

最後に、ブログ記事アーカイブテンプレートに、前後の記事へのリンクを出力する部分を追加します。

手順3によって、個々のブログ記事の前後の記事の情報が、変数sorted_entry_previous等(手順1の表を参照)に代入されます。
MTGetVarタグやMTIfタグを使って、それらの変数を元にして、前後の記事へのリンクを出力します。
今取り上げている例だと、前後の記事へのリンクを出力したい位置に、以下のようなテンプレートタグを入れます。

<mt:If name="sorted_entry_previous">
  <a href="<$mt:GetVar name="sorted_entry_previous_permalink"$>">前の記事(<$mt:GetVar name="sorted_entry_previous_title"$>)</a> |
</mt:If>
<a href="<$mt:BlogURL$>">メインページ</a>
<mt:If name="sorted_entry_next">
  | <a href="<$mt:GetVar name="sorted_entry_next_permalink"$>">次の記事(<$mt:GetVar name="sorted_entry_next_title"$>)</a>
</mt:If>

1~3行目は、前の記事へのリンクを出力する部分です。
1行目のMTIfタグで、前の記事がある(変数sorted_entry_previousの値が真である)かどうかを判断します。
そして、記事があれば(変数の値が真であれば)、2行目によって、前の記事のタイトル(変数sorted_entry_previous_title)を出力し、その部分を前の記事へのリンク(変数sorted_entry_previous_permalink)にします。
同様の手順で、5~7行目で次の記事へのリンクを出力します。