タグ機能はCompare/Collate Pluginと組み合わせて使うべし、なぜにゃらば!!
なぜにゃらば、それはそうしないと使い物にならないからです。
Movable Type 3.3の標準のタグ機能でソートしたりリストの一部を取り出したりできないので困るという話は割とよく見かけます。
greenplastic.net: 未だにMT3.3へ移行できない理由
しかし、Compare PluginやCollate Pluginを使えば、そうした問題はごく簡単に解決できます。
大まかに言って、Compare Pluginはフィルター、Collate Pluginはソーター、という相補的な役割を持っています。例えば、タグやアーカイブリストのような大きなリスト構造があるとき、必要なアイテムだけを抽出するにはCompare、適当なキーに対してソートする(あるいは、ソートして最初のN件を取り出す)にはCollateを使います。Compareで抽出したリストに対してCollateでソートするということもできます。
以下では、タグ機能とCompare/Collate Pluginを組み合わせて利用する例を挙げます。
Compare Pluginを利用する例
頻度が一定以上高いタグ(ここでは、MTTagRankの値が3以下のタグ)だけをリストしたい場合には、Compare Pluginを使って以下のように書くことができます。
<h2>Major tags</h2>
<ul>
<MTTags>
<MTIfLessOrEqual a="[MTTagRank]" b="3" numeric="1">
<li><a title="Tag: <$MTTagName encode_html="1"$>"
href="<$MTBlogURL$>tag/<$MTTagName encode_url="1"$>">
<$MTTagName encode_html="1"$>
</a></li>
</MTIfLessOrEqual>
</MTTags>
</ul>
Collate Pluginを利用する例
使用頻度の高いタグを20個リストしたい場合には、Collate Pluginを使います。まず、MTCollateCollectでタグ情報を取り出しておきます。*1
<MTCollateCollect>
<MTTags>
<MTCollateRecord>
<MTCollateSetField name="tag_name"><$MTTagName$></MTCollateSetField>
<MTCollateSetField name="tag_id"><$MTTagID$></MTCollateSetField>
<MTCollateSetField name="tag_count"><$MTTagCount$></MTCollateSetField>
<MTCollateSetField name="tag_rank"><$MTTagRank$></MTCollateSetField>
<MTCollateSetField name="tag_search_link"><$MTTagSearchLink$></MTCollateSetField>
</MTCollateRecord>
</MTTags>
</MTCollateCollect>
次にtag_countで降順にソートし、最初の20件を取り出すだけです。簡単ですね。
<h2>Tags most used</h2>
<ul>
<MTCollateList limit="20" sort="tag_count:#:-">
<li>
<a title="Tag: <$MTCollateField name="tag_name" encode_html="1"$>"
href="<$MTBlogURL$>tag/<$MTCollateField name="tag_name" encode_url="1"$>">
<$MTCollateField name="tag_name" encode_html="1"$>
</a>
</li>
</MTCollateList>
</ul>
TagSupplementals Plugin(TagSupplementals Plugin.ja JP - Ogawa Code)を使えば、最近更新されたタグを20個リストすることもできます。
そのためにはまず、*1 のMTCollateSetFieldの列に以下を追加します。
<MTCollateSetField name="tag_last_updated"><$MTTagLastUpdated
format="%Y%m%d%H%M%S"$></MTCollateSetField>
次にtag_last_updatedで降順にソートし、最初の20件を取り出します。
<h2>Tags most recently updated</h2>
<ul>
<MTCollateList limit="20" sort="tag_last_updated:#:-">
<li>
<a title="Tag: <$MTCollateField name="tag_name" encode_html="1"$>"
href="<$MTBlogURL$>tag/<$MTCollateField name="tag_name" encode_url="1"$>">
<$MTCollateField name="tag_name" encode_html="1"$>
</a>
</li>
</MTCollateList>
</ul>
両方とも利用する例
かなり恣意的な例ですが、MTTagRankの値が3以下のタグを、使用頻度や更新時刻でソートして20個取り出すこともできます。
*1 の代わりに以下のように書けばよいわけです。
<MTCollateCollect>
<MTTags>
<MTIfLessOrEqual a="[MTTagRank]" b="3" numeric="1">
<MTCollateRecord>
<MTCollateSetField name="tag_name"><$MTTagName$></MTCollateSetField>
<MTCollateSetField name="tag_id"><$MTTagID$></MTCollateSetField>
<MTCollateSetField name="tag_count"><$MTTagCount$></MTCollateSetField>
<MTCollateSetField name="tag_rank"><$MTTagRank$></MTCollateSetField>
<MTCollateSetField name="tag_search_link"><$MTTagSearchLink$></MTCollateSetField>
<MTCollateSetField name="tag_last_updated"><$MTTagLastUpdated
format="%Y%m%d%H%M%S"$></MTCollateSetField>
</MTCollateRecord>
</MTIfLessOrEqual>
</MTTags>
</MTCollateCollect>このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/432
そうおっしゃるOgawaさんは、なぜ3.3に移行しないのですか?
はーい、面倒だからです。使ってなくても3.3用のプラグインは書けますし。
…今週中にはなんとか。
TagSupplementalsのMTArchiveTags container tagとCollate Pluginと組み合わせて、
現在のアーカイブに含まれるエントリーのタグの内、
頻度の高いタグ20個を表示させようとしているのですが、どうもうまくいきません。
どうしたらうまくできるのでしょうか?
教えてください。よろしくお願いします。