Home » September 2006 » TagSupplementals Plugin 0.05公開

TagSupplementals Plugin 0.05公開

Movable Type 3.3以降でサポートされた「タグ」に便利機能を追加・拡張するTagSupplementals Plugin(TagSupplementals Plugin公開 - Ogawa::Memoranda)を例によってちょびっとアップデートしました。

機能上の変更点は、MTArchiveTagsというコンテナタグを追加して、カテゴリーアーカイブや月別アーカイブなどで、当該アーカイブのエントリーのタグのみをリストできるようにした、という点です。

カテゴリーアーカイブや月別アーカイブのテンプレートで以下のように記述すると、そのアーカイブに含まれるエントリーの持つタグのみをリストしてくれます。

<ul class="archive-tags-list">
  <MTArchiveTags>
  <li><a href="<$MTTagSearchLink$>" rel="tag"><$MTTagName$></a></li>
  </MTArchiveTags>
</ul>

あとはMovable Type 3.3以降では、MT::Pluginにコンテナタグや変数タグ、グローバルフィルターを追加するためのインタフェースが追加されていた(Movable Type オブジェクト・リファレンス - MT::Plugin)のに今更気が付いたので、それを使って少し書き直してみました。

どういうことかというと、3.2以前ではコンテナタグなどを一個追加するたびに

MT::Template::Context->add_container_tag(AContainer => \&hdlr_a_container);

と書かなくてはなりませんでしたが、3.3ではMT::Pluginオブジェクトをnewするときに簡単に宣言を加えるだけで済みます。

package MyPlugin;
use base qw(MT::Plugin);
my $plugin = MyPlugin->new({
    name => 'MyPlugin',
    ...,
    template_tags => {
        ATemplate => \&hdlr_a_template,
        BTemplate => \&hdlr_b_template,
    },
    container_tags => {
	AContainer => \&hdlr_a_container,
	BContainer => \&hdlr_b_container,
    },
    global_filters => {
	AFilter => \&hdlr_a_filter,
    },
});
MT->add_plugin($plugin);

これ使うと下位互換性がなくなっちゃうわけですけどね。


他にもこんな機能があったらなという希望があったらコメント・トラックバックでお知らせください。簡単に実現できる機能から順に気まぐれに更新していきます。

TagSupplementals Plugin.ja JP - Ogawa Code
TagSupplementals Plugin - Ogawa Code (English)

このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/434

Links referred to this entry

Comments (6)

  1. こんにちわ^^

    いつもお世話になっております。
    この機能いいですね♪

    サイドバーにタグクラウド表示しているサイトが多いですが、アーカイブページ内では、関連するタグのみ表示させられるからすっきして、探し易いかも、です。

    さっそく試してみます。

  2. はじめまして。いつも参照させていただいております。

    えー、かなり特異な要望になるかと思いますが、頼るところがほかに思いつかず、まったく個人的な「いまほしがっている機能」を書かせていただきます。

    David Raynesさんの MultiBlog (1.99.7b) を使い、複数のブログにまたがったタグクラウドを作っています。が、MultiBlog にはエントリー・タグに特化したコンテナタグは用意されていないようで、

    <MTMultiBlog include_blogs="1,3">
    <MTTags>...</MTTags>
    </MTMultiBlog>

    というような書き方をしているのですが、これだと、両方のブログに同じタグが存在する場合にアグリゲートしてくれず、別々に2個表示されてしまいます。

    つまりまあ、こんなものは MultiBlog のバージョンアップを待てよ(というか、David Raynesに要望を出せよ)ってことだとはおもうのですが、<MTTags>の代替として<MTMultiBlog>タグのなかでアグリゲートまでしてくれるコンテナタグ、とか小川さんに要望しちゃダメですかね?ダメでしょうね(笑)

    それだったらこういう手があるのでは?という示唆などいただければ、それだけでも大喜びです。

    いきなり失礼しました。ではまた。

  3. 自己レスというか、付け足しというか。
    書き込んでみて、「これですがれるだけのところにはすがった」というような心境になって落ち着きを取り戻しつつある私がいまいるわけですが、これ、やっぱりいじるべきは MultiBlog のほうの処理ですよね。

    そのなかで動作するコンテナタグでどうにかしようというのはたぶん無理のあることなんだろうと想像します。

    で、自身で MultiBlog プラグインをいじり、たとえば<MTMultiBlogTags> といったようなコンテナタグを付け足せるかなあとやってみて、まったく歯が立たずに退散、ここに書き込んだという次第でした。

  4. MTCollateを使えばある程度まではできると思いました。私はMutliBlogを使っていないので、代わりに最新の10件のエントリーに含まれるタグを重複せずにリストする例を挙げます。

    <MTCollateCollect>
    <MTEntries lastn="10">
    <MTEntryTags>
    <MTCollateRecord>
    <MTCollateSetField name="tag_name"><$MTTagName$></MTCollateSetField>
    <MTCollateSetField name="tag_count"><$MTTagCount$></MTCollateSetField>
    </MTCollateRecord>
    </MTEntryTags>
    </MTEntries>
    </MTCollateCollect>
     
    <ul>
    <MTCollateList sort="tag_name">
    <MTCollateIfHeader name="tag_name">
    <li><$MTCollateField name="tag_name"$></li>
    </MTCollateIfHeader>
    </MTCollateList>
    </ul>
    

    SOMAさんの場合には、上のコードでMTEntriesをMTMultiBlogに、MTEntryTagsをMTTagsに置き換えれば、指定した複数のブログに含まれる全タグをリストできることがお分かりになるでしょう。

    ただ、このままではMTTagRankやMTTagCountの集計はできません。少なくとも数値のリストが与えられたときにそれらを加算したり平均値を求めたりする機能が必要になるでしょう。そういう用途に適したプラグインがあるかどうかよく分かりませんが、MTMultiBlogTagsみたいなタグを作るよりは圧倒的に容易に作れそうですね。

  5. ああー、なるほどー。
    ありがとうございます。

    「数値のリストが与えられたときにそれらを加算したり平均値を求めたりする機能」というのを自分で「容易に作れ」るかどうか、それさえちょっと自信がないことは正直白状させていただくとして、ともかく、八方塞がりな中に光が差しました。

    ありがとうございました。

  6. こんばんわ^^

    TagSupplementals プラグインを MT3.3x から使わせていただいております。

    MT4 にてインストールしたところ、プラグイン一覧ではエラーしてないのですが、追加した各タグを使って再構築すると、タグが認識されませんでした。

    ですので、各タグのハンドラ定義を以下のように変更したら、問題なく!? 使えるようになりました。

    ---
    MT::Template::Context->add_tag (EntryTagsCount => \&entry_tags_count);
    MT::Template::Context->add_tag (TagLastUpdated => \&tag_last_updated);
    MT::Template::Context->add_tag (EntryTagsCount => \&entry_tags_count);
    MT::Template::Context->add_tag (TagXSearchLink => \&tag_xsearch_link);
    MT::Template::Context->add_container_tag(RelatedEntries => \&related_entries);
    MT::Template::Context->add_container_tag(RelatedTags => \&related_tags);
    MT::Template::Context->add_container_tag(ArchiveTags => \&archive_tags);
    MT::Template::Context->add_container_tag(SearchTags => \&search_tags);
    MT::Template::Context->add_container_tag(XSearchTags => \&xsearch_tags);
    MT::Template::Context->add_global_filter(encode_urlplus => \&encode_urlplus);
    ---

    すべてのタグを確認したわけではありませんが、お時間ができたら 正式にリリースしていただけると嬉しいです。

    以上ご報告まで♪

Post a comment

Remember me?