MTで同カテゴリの前後エントリーへのリンクを作る

MovableTypeで個別エントリーページを表示した際、上部に「« 「前のエントリ」|TOP|「次のエントリ」 »」とリンクが表示されているが、これは投稿した時間順に並べたものである。
これは投稿された順に見てゆく場合には都合が良いけど、例えば本の感想だけ、ソラリスカテゴリだけ、いきものカテゴリだけ見たいという人にとっては不便である。
見ているエントリーが属しているカテゴリ内のエントリーを投稿した順番に並べて、個別のエントリーにつき「同じカテゴリの前のエントリ」と「同じカテゴリの次のエントリ」てな感じのリンクを表示出来るようにすれば便利に違いないという事で「Previous and next in category」なるプラグインを使った方法を見つけたが、「画像」と「日記」などのように二つのカテゴリに属しているエントリーでちゃんと動作しない。実装は簡単なのだが惜しい。
で、無いものは作ってしまえという事で作ったので公開してみる。
結構限定された環境になるけど、同じことを考えている人のヒントにでもなればと。


前提条件:
エントリーをphpで作っている人
phpでpassthru()が使える。
CGIからシェルスクリプトが実行できる。
1
MTの「テンプレート」→「アーカイブ」→「テンプレートを新規作成 」
「テンプレート名」を「カテゴリエントリリスト」として以下の内容で作成する。

<MTEntries>
<!– <$MTEntryID$> –><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>
</MTEntries>

2
サーバー上のアーカイブディレクトリに(例:/blog/archive) ディレクトリ「catlist」を作成して書き込み権限をつけておく。
3
「設定」→「公開」の「アーカイブ・マッピング」で「マッピングを新規作成」、アーカイブの種類を「カテゴリ」 テンプレートを「カテゴリエントリリスト」で「追加」を押す。
追加されたテンプレートの出力フォーマットから「カスタマイズする」を選択して「catlist/cat-id<$MTCategoryID$>.php」と入力する。
4
先ほど作成したcatlistディレクトリの下に実行権限をつけたシェルスクリプト「catlist.sh]を以下の内容で作成する。

#!/bin/sh
echo "<dl><dt>Previous</dt>"
echo "<dd>"
grep -A 1 "<\!– $1 –>" /catlistディレクトリへのフルパス/cat-id$2.php |/usr/sfw/bin/ggrep -v "<\!– $1 –>"
echo "</dd>"
echo "<dt>Next</dt>"
echo "<dd>"
grep -B 1 "<\!– $1 –>" /catlistディレクトリへのフルパス/cat-id$2.php |/usr/sfw/bin/ggrep -v "<\!– $1 –>"
echo "</dd> </dl>"

grepは-A や-Bオプションが使えるGNU互換のものを。
solarisなら/usr/sfw/bin/ggrepを使う。

5
MTの「テンプレート」→「アーカイブ」→「個別エントリーアーカイブ」を選び、挿入したいサイドバーの位置に以下のコードを挿入

<!– 同じカテゴリエントリ –>
<MTEntryCategories>
<div class="sidetitle">
「<$MTCategoryLabel$>」<br />
category’s entry
</div>
<div class="side">
<? passthru("/catlistディレクトリへのフルパス/catlist.sh <$MTEntryID$> <$MTCategoryID$>" ) ; ?>
</div>
</MTEntryCategories>
<!– 同じカテゴリエントリ –>

6
エントリーを再構築して終了

コメントする

メールアドレスが公開されることはありません。

PAGE TOP