MT の Recent TrackBack で連続したトラックバックをヘッダー化する方法 [要Plugin : MTCollate , MTPingedEntry]
- Date
- 2004-10-20 T14:10:34+09:00
- Category
- Tags
-
- No tags available
- Reactions
同じ記事に連続してトラックバックをされた場合、トラックバックされた記事のタイトルなりを括ってヘッダー化します。以前ツリー化と書いていましたが、正確な表現ではなかったので訂正させてください。
というのも、[a] の記事に11月20日にトラックバックされ、[b] の記事に11月22日に、そしてまた[a]の記事に11月30日にされたとしたら、20日と30日は同一の記事にトラックバックされているのにソートはされないので同一のタイトルで括ることが出来ないからです。要は、時間に遡行性が無いってことです。そこを上手くしたかったら、よく jugem ユーザーさんが使っている JavaScript が使用できるように弄ったら良いかと思います。
ツリー化する方法が見つかりました。詳しくは「MT で Recent Trackbacks のツリー化 [要Plugin]」で。

下準備。最新数件のトラックバックしたブログを表示しリンクを貼る機能がデフォルトでありますが、トラックバックされたエントリーを表示する機能が何故か無いので、MTPingedEntryというプラグインを導入しておく。
すると、トラックバックされた自分のブログのエントリー、URL を表示できるようになり、一例ですが左のスクリーンショットのようになります。

上のスクリーンショットを例に話を進めますが、トラックバックされたエントリーが下の2件でかぶっているのでそれをヘッダーにして括れないかと考えたところ、MTCollateというプラグインでできました。
結果、下のスクリーンショットのように。ついでなので、MTCollate の説明もしてみました。
MTCollate の概要
Displaying (heterogeneous) lists of items sorted by multiple item attributes.
直訳すると多数のアイテム属性によってソートされたアイテムのリストの表示(異なるデータを混同してのソートも可能)。と言う感じでしょうか。もう少し詳しく見ると
The MTCollate plugin gives you great flexibility in sorting listings (for example, descending by date while ascending by time) and allows you to list heterogeneous data (for example, entries, comment and trackback pings together sorted by time). It even allows you to sort by non-continuous values (for example, categories could be sorted by other than name or id).
多種多様な柔軟性を持ったソートの仕方を可能にするプラグインということでしょう。以前にもカテゴリーの順序を並び替える時に使いました。ソートにかなりの幅が出ます。
例えば、エントリー・コメント・トラックバックなどの異質のデータを時間によってソートできるとも書いてあるので、まだまだ別な使い方がありそう。
導入方法
MT Extensions: MTCollate 1.1でダウンロードし、「plugins」ディレクトリ内にアップするだけ。これで、MTCollate 独自の拡張タグが使用できるようになります。
大雑把な拡張タグ説明
MTCollate works by building a virtual collection of records using the MTCollateCollect, MTCollateRecord and MTCollateSetField container tags.
中略
Once a collection has been built, its contents can be displayed using the MTCollateList and MTCollateField tags. MTCollateIfHeader and MTCollateIfFooter tags can be used to separate records that are listed, similar to MTDateHeader and MTDateFooter.
大雑把に訳せば、名前を適当に付けて、その名前を元に好きなようにソートする。ということ。使用するタグは以下の通り。
- ソートする為に自由に名前を定義する。
<MTCollateCollect>: 定義部分の開始<MTCollateRecord>: 名前を付ける部分を括る<MTCollateSetField name="●●">: 名前を自由に付ける。as long as their names are unique
ということで、名前が被らなければ(ユニークであれば)どんな名前をつけても良いよう。
- 一旦定義したら、自由にソートできます。
<MTCollateList>: ソート開始<MTCollateField name="●●">: SetField で付けた部分を名前を同一にして置換<MTCollateIfHeader>:<MTDateHeader>と似た動作をする。省略可能なので必要な場合のみ使用。<MTCollateIfFooter>:<MTDateFooter>と似た動作。同上。
定義部分で
<MTCollateSetField name="tbed_url"><$MTPingedEntryLink$></MTCollateSetField>
としたら、ソート部分では
<MTCollateField name="tbed_url">
とします。
実例
実際どうしたかを見た方が分かりやすいのでタグを並べて説明。collection のいい日本語が見当たらなかったので、そのまま用います。
<!-- MTCollate を用いた時にのみ適用される collection の定義をする --> <MTCollateCollect> // 定義部分の開始 <MTPings lastn="5"> ←トラックバックを扱うので <MTCollateRecord> // 名前の定義 <MTPingedEntry> ← プラグイン「MTPingedEntry」に掛かる部分を括る <MTCollateSetField name="tbed"><a href="<$MTPingedEntryLink$>" title="TrackBackされた記事"><$MTPingedEntryTitle$></a></MTCollateSetField> </MTPingedEntry> <MTCollateSetField name="ping_url"><$MTPingURL$></MTCollateSetField> <MTCollateSetField name="ping_title"><$MTPingTitle$></MTCollateSetField> <MTCollateSetField name="ping_site"><$MTPingBlogName$></MTCollateSetField> <MTCollateSetField name="ping_date"><$MTPingDate format="%m.%d"$></MTCollateSetField> </MTCollateRecord> </MTPings> </MTCollateCollect>
<!-- 定義した collection の名前を用いて実際にソートする。ちなみに、この場合は SetField で名付けた tbed を元にヘッダーを作成しました。 --> <dl class="utility"> <dt>Recent Trackbacks</dt> <dd> <ul> <MTCollateList> // collection の表示、ソートを開始 <MTCollateIfHeader name="tbed"> // ヘッダー <li><MTCollateField name="tbed"> </MTCollateIfHeader> <br />└ <a href="<MTCollateField name="ping_url">" title="<MTCollateField name="ping_title">"><MTCollateField name="ping_site"></a> - <MTCollateField name="ping_date"> <MTCollateIfFooter name="tbed"> </li> </MTCollateIfFooter> </MTCollateList> </ul> </dl>
タグ内にも書きましたが、トラックバックのツリー化をするに当たって、トラックバックされた URL(SetField で tbed を定義)をヘッダーを作る基準にしました。
参考までに、MTCollate を用いる以前の(上のスクリーンショット)タグ
<dl class="utility">
<dt>Recent Trackbacks</dt>
<dd>
<ul class="sidemenu">
<MTPings lastn="5">
<li><MTPingedEntry><a href="<$MTPingedEntryLink$>" title="TrackBackされた記事"><$MTPingedEntryTitle$></a><br />
└ <a href="<$MTPingURL$>" title="<$MTPingTitle$>"><$MTPingBlogName$></a> -<$MTPingDate format="%m.%d"$></MTPingedEntry></li>
</MTPings>
</ul>
</dd>
</dl>
追記というか訂正 at 2005-11-30
まどろっこしい記述があったので、訂正。あと、タイトルを少しだけ正確に変更。
