Sep 13, 2006

タグ機能は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 - ogawa - 「タグ」機能を追加・拡張するプラグイン。 - Google 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>

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com