Movable Type 備忘録

 最近のトラックバックをエントリごとに一覧する

MovableType(ムーバブルタイプ)のトラックバック一覧は、最近のコメント一覧とちがってトラックバックごとに一覧されてしまいますよね。
あるエントリに複数のトラックバックがされた場合、まとまって一覧されないのでちょっと気に入らなかったんです。

今回は最近のコメント一覧のようにエントリに複数のトラックバックがされた場合、まとめて表示できるようなカスタマイズをやってみました。

コメント一覧は、<MTEntries>タグの recently_commented_on でカンタンにできますが、 トラックバックをエントリごとにまとめて表示させるには、ちょっと大変なようで2つのプラグインを組み合わせて実現します。
1つはMTCollateプラグイン。もう1つは、MTPingEntryプラグインです。

トラックバックをエントリごとにまとめて表示させるには、2回の処理に分けて行う必要があるようです。
まず前準備として、最新のエントリ(例えば、10件)にトラックバックされたかどうかをチェックして、トラックバックされたエントリをリストアップ(保持)するためのプラグインが、このMTCollateプラグインみたい。 この時トラックバック情報を取り出しているのが、MTPingEntryプラグインのようです。
そして、リストアップされたエントリのトラックバック情報をMTCollateプラグインから順次表示させる...という手順で行っています。

このカスタマイズは、動的ページでは動作しないようです。 注意してください。

参考にしたサイトは、Ogawa::Memoranda 様です。

カスタマイズ方法

  1. 各プラグインをダウンロードします。
    上記URLから各プラグインをダウンロードしてください。

    MTPingEntryプラグインは、PingEntry.pl というファイル名で保存します。

  2. PingEntry.pl を編集します。
    テキストエディタで PingEntry.pl を開いてください。 そして、以下のように修正します。

    1. $out = $builder->build($ctx, $tokens, $cond);
    2. $ctx->stash('entry', $saved_stash);
    3. $ctx->stash('ping', $ping);
    4. return $ctx->error($builder->errstr) unless defined $out;

    青い字の行を追加します。
    追加したらファイルを保存してください。その際、各自の環境の文字コードに合わせて保存します。
    わたしは UTF-8 で保存しました。

  3. サーバにアップロードします。
    いつものように mt/plugins/ の中に各プラグインをアップロードします。

  4. 最近のトラックバック一覧を変更します。
    メイン・ページ中の最近のトラックバック一覧を以下のコードと差し替えます。

    1. <MTCollateCollect>
    2.     <MTPings lastn="10">
    3.         <MTCollateRecord>
    4.             <MTCollateSetField name="ping_id"><$MTPingID$></MTCollateSetField>
    5.             <MTCollateSetField name="ping_url"><$MTPingURL$></MTCollateSetField>
    6.             <MTCollateSetField name="ping_title"><$MTPingTitle$></MTCollateSetField>
    7.             <MTCollateSetField name="ping_blog_name"><$MTPingBlogName$></MTCollateSetField>
    8.             <MTCollateSetField name="ping_date"><$MTPingDate format="%m/%d"$></MTCollateSetField>
    9.  
    10.             <MTPingEntry>
    11.                 <MTCollateSetField name="entry_key"><MTPings lastn="1"><$MTPingDate format="%y%m%d%H%M%S"$></MTPings></MTCollateSetField>
    12.                 <MTCollateSetField name="entry_link"><$MTEntryLink$></MTCollateSetField>
    13.                 <MTCollateSetField name="entry_title"><$MTEntryTitle$></MTCollateSetField>
    14.             </MTPingEntry>
    15.         </MTCollateRecord>
    16.     </MTPings>
    17. </MTCollateCollect>
    18.  
    19. <ul>
    20.     <MTCollateList sort="entry_key:#:- ping_id:#:+">
    21.         <MTCollateIfHeader name="entry_key">
    22.             <li><a href="<$MTCollateField name="entry_link"$>" title="<$MTCollateField name="entry_title" encode_html="1"$>"><$MTCollateField name="entry_title"$></a>
    23.             <ul>
    24.         </MTCollateIfHeader>
    25.  
    26.         <li><a href="<$MTCollateField name="ping_url"$>" title="<$MTCollateField name="ping_title" encode_html="1"$>" target="_blank"><$MTCollateField name="ping_blog_name"$></a> <$MTCollateField name="ping_date"$></li>
    27.  
    28.         <MTCollateIfFooter name="entry_key">
    29.             </ul>
    30.             </li>
    31.         </MTCollateIfFooter>
    32.     </MTCollateList>
    33. </ul>

    青い字の部分では、先ほど話した前準備にあたります。赤い字の部分がリストアップされたトラックバック一覧を表示させる部分にあたります。
    緑の字の部分は、表示させたいトラックバック数を指定しています。
    ピンクの字の部分では表示順を指定しています。

    1. エントリを昇順(新しいものが上)、トラックバックを昇順(古いものが上)で表示する場合
    2. <MTCollateList sort="entry_key:#:- ping_id:#:+">
    3.  
    4. エントリを昇順(新しいものが上)、トラックバックを降順(新しいものが上)で表示する場合
    5. <MTCollateList sort="entry_key:#:- ping_id:#:-">
    6.  
    7. エントリを降順(古いものが上)、トラックバックを昇順(古いものが上)で表示する場合
    8. <MTCollateList sort="entry_key:#:+ ping_id:#:+">
    9.  
    10. エントリを降順(古いものが上)、トラックバックを降順(新しいものが上)で表示する場合
    11. <MTCollateList sort="entry_key:#:+ ping_id:#:-">
  5. 差し替えたら、保存して再構築します。

以上で、最近のトラックバック一覧も最近のコメント一覧のように、エントリごとにトラックバックを一覧表示することができました。

SEE YOU

 Trackback Pings(0)

No trackbacks found.

 Comments(0)

No comments found.

 Post a Comment

 

コメント用フィード