MovableTypeで同じカテゴリの前後エントリーへのリンクを作るPHP版(複数カテゴリ対応)

以前にMovabletypeで同カテゴリの前後エントリーへのリンクを作る」と言うエントリーで同じカテゴリ内の前と次のエントリーのリンクを表示される方法を書いた。
しかしながらこれは「エントリーをphpで作っている人」「phpでpassthru()が使える。」「CGIからシェルスクリプトが実行できる。(shスクリプト)」とかなり限定された環境でしか動かず、私が新しくXREAのアカウントを取って動作させてみたところエラーが出て動かなかった。
ということで、従来シェルスクリプトで動作させていたところをPHPで動作させるように書き換えた。ちゃんとXREAで動くのを確認しております。
とりあえず MovableType 3.32-jaで動作確認していますが、単純にPHPを使っているだけなので他のバージョンでも動作するかと。


個別エントリーページを表示した際、上部に「 「前のエントリ」|TOP|「次のエントリ」 」とリンクが表示されているが、これは投稿した時間順に並べたものである。
このリンクでのナビゲーションは投稿された順に見てゆく場合には都合が良いけど、例えば本の感想だけ、ソラリスカテゴリだけ、いきものカテゴリだけ見たいという人にとっては不便なので、見ているエントリーが属しているカテゴリ内のエントリーを投稿した順番に並べて、個別のエントリーにつき「同じカテゴリの前のエントリ」と「同じカテゴリの次のエントリ」てな感じのリンクを表示出来るようにすれば便利に違いないという事で調べてみた結果、「Previous and next in category」なるプラグインを使った方法を見つけた。
しかしこれは「画像」と「日記」などのように二つのカテゴリに属しているエントリーではメインカテゴリしか表示されない。実装は簡単なのだが惜しい。
何とか複数カテゴリで表示できるものは無いか?無いものは作ってしまえという事で作ったので以下の通り公開して見る。
1
MTの「テンプレート」→「アーカイブ」→「テンプレートを新規作成 」
「テンプレート名」を「カテゴリエントリリスト」として以下の内容で作成する。

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

2
MTの「設定」→「公開(詳細モード)」→「アーカイブ・マッピング 」→「カテゴリー」→「マッピングの新規作成」で
「アーカイブの種類」に「カテゴリー」、「テンプレート」に先ほど作成した「カテゴリごとエントリリスト」を指定して「追加」
追加されたら、「出力フォーマット」から「カスタマイズ」を選び「 cat-id<$MTCategoryID$>.php 」とする。
3
MTの「テンプレート」→「テンプレートを新規作成」→
テンプレート名:カテゴリごとの前と次のエントリ
出力ファイル名catlist.php
テンプレートの内容 :

<?

$list = file_get_contents("/アーカイブ・パス/cat-id{$cid}.php");

$line = split("\n", $list);
foreach($line as $key => $a) {
 if (ereg("<!-- $eid -->" , $a)){
  $contline[key]=$key ;
  $prvkey= $key -1 ;
  $nextkey= $key +1 ;
 }


 $content = "<dl><dt>Previous</dt>"
          . "<dd>&laquo;"
          . " $line[$prvkey]"
          . "</DD>"
          . "<dt>Next</dt>"
          . "<dd>&raquo;"
          . " $line[$nextkey]"
          . "</DD></Dl>" ;
}
print $content ;

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

<!-- 同じカテゴリエントリ -->
<MTEntryCategories>
<div class="sidetitle">
「<$MTCategoryLabel$>」<br />
category's entry
</div>
<div class="side">
<? $eid = "<$MTEntryID$>"; $cid = "<$MTCategoryID$>" ;
include "/アーカイブ・パス/catlist.php" ;?>
</div>
</MTEntryCategories>
<!-- 同じカテゴリエントリ -->

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

コメントする

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

PAGE TOP