JavaScript、Ajax、HTML5(API)、Ruby…Web及び関連技術の実験&情報公開&制作物紹介。

意外と知られていない機能を引き出す! カテゴリーソートプラグイン

| コメント(3) | トラックバック(6)

みなさん、Movable Type でカテゴリーの一覧を出力するのに、「ソートができない」って悩んでいませんか?

意外と知られていないかも知れませんが、実は、ある条件を満たせば、自由にカテゴリーのソートができるんです。
その条件とは、以下の2つ。

  1. カテゴリーの出力に、<MTTopLevelCategories>もしくは<MTSubCategories>を利用する
  2. その sort_method 属性に、目的にあったソートメソッド(Perlで記述されたソートルール関数もしくはブロック)を指定する

この、後者の「ソートメソッド」を提供するもの、それが、今回お届けするオリジナルプラグイン「カテゴリーソートプラグイン」です。
MTシステムにインストールするだけで、誰でも自由にカテゴリーのソートができるようになります!

【2007/02/13 ドネーションに関する追記】

ダウンロード

(どちらかを選択してください。内容は同じです。)

ver.0.42 [New!]
古いバージョン

ver.0.2?0.41 の日本語ローカライズは、MT3.3以降のみの対応でした。MT3.2xに ver.0.2?0.41 をインストールすると、プラグインの一覧表示時にエラーが発生します。MT3.2xをご使用の方は、ver.0.42にアップデートをお願いします。MT3.3xでver.0.41をご使用の方は、特に0.42へのアップデートの必要はありません。

ver.0.4 に「非公開のエントリーもカウントしてしまう」(<$MTCategoryCount$>と動作が異なる)というご指摘をいただきました。公開状態のエントリーのみをカウントするものをver.0.41として改めて公開し、ver.0.4は現在非公開とさせていただいています。

ver.0.3 以前には、by_recently_entry_posted および by_recently_entry_modified の2つのメソッドにおいてソートする項目が多くなると再構築時間が極端に遅くなる問題があります。
できる限り最新版を使用することをオススメします。

ver.0.1
ver.0.2
ver.0.3
ver.0.41
>>>全て表示する <<<一部を隠す

インストール

  1. ダウンロードしたファイルを解凍してください。
    解凍ソフトに「ディレクトリ構造を**」というオプションがある場合は、「ディレクトリ構造を有効(再現、等)」にして解凍すると、以下のようなディレクトリ構造が生成されます:
    CatSort
      ┣CatSort.pl
      ┗lib
        ┣CatSort.pm
        ┗CatSort
          ┣L10N.pm
          ┗L10N
            ┣en_us.pm
            ┗ja.pm
  2. 解凍して得られた CatSort フォルダごと、[MT]/plugins/ フォルダ内にコピー(アップロード)してください。
旧バージョンからのアップデート

最新バージョンにアップデートする場合は、全てのファイルをフォルダごと上書きコピー(アップロード)すればOKです。
(以前のバージョンへダウンデートする場合も同様……その必要はないはずですけれど。)

提供するソートメソッド

CatSort::by_label
カテゴリー名(ラベル)の昇順にソートするメソッド
(通常のカテゴリー一覧出力と同じソートになります)
CatSort::by_label_r
カテゴリー名(ラベル)の降順にソートするメソッド
CatSort::by_labelの逆順になります
CatSort::by_label_i
カテゴリー名(ラベル)の昇順にソートするメソッド
CatSort::by_labelとの違いは、半角アルファベットの大文字小文字を区別しません
CatSort::by_label_i_r
カテゴリー名(ラベル)の降順にソートするメソッド
CatSort::by_label_iの逆順になります
CatSort::by_id
カテゴリーIDの昇順にソートするメソッド
カテゴリーIDは作成された順に一意に割り振られる数値なので、「カテゴリー作成順」にソートしたい場合に使えます
CatSort::by_id_r
カテゴリーIDの降順にソートするメソッド
CatSort::by_idの逆順になります
CatSort::by_basename
※ Movable Type 3.3x 以降のみ対応
カテゴリーベース名(ディレクトリ名)の昇順にソートするメソッド
CatSort::by_basename_r
※ Movable Type 3.3x 以降のみ対応
カテゴリーベース名(ディレクトリ名)の降順にソートするメソッド
CatSort::by_basenameの逆順になります
CatSort::by_basename_i
※ Movable Type 3.3x 以降のみ対応
カテゴリーベース名(ディレクトリ名)の昇順にソートするメソッド
CatSort::by_basenameとの違いは、半角アルファベットの大文字小文字を区別しません
CatSort::by_basename_i_r
※ Movable Type 3.3x 以降のみ対応
カテゴリーベース名(ディレクトリ名)の降順にソートするメソッド
CatSort::by_basename_iの逆順になります
CatSort::by_recently_entry_posted
[ver.0.4 で修正]
最近エントリーが投稿されたカテゴリーが先に表示されます。
エントリーのないカテゴリーは最後に表示されます。
CatSort::by_recently_entry_modified
[ver.0.4 で修正]
最近エントリーが編集されたカテゴリーが先に表示されます。
エントリーのないカテゴリーは最後に表示されます。
CatSort::by_description
[ver.0.3 で追加]
カテゴリーの「説明」の昇順にソートするメソッド
カテゴリーの説明とは、<$MTCategoryDescription$>で表示される内容のことです。
CatSort::by_description_r
[ver.0.3 で追加]
カテゴリーの「説明」の降順にソートするメソッド
CatSort::by_descriptionの逆順になります
CatSort::by_description_i
[ver.0.3 で追加]
カテゴリーの「説明」の昇順にソートするメソッド
CatSort::by_descriptionとの違いは、半角アルファベットの大文字小文字を区別しません
CatSort::by_description_i_r
[ver.0.3 で追加]
カテゴリーの「説明」の降順にソートするメソッド
CatSort::by_description_iの逆順になります
CatSort::by_entry_count
[ver.0.4 で追加]
カテゴリーに属するエントリー数の多い順に表示されます。
CatSort::by_entry_count_r
[ver.0.4 で追加]
カテゴリーに属するエントリー数の少ない順に表示されます。
ただし、エントリーのないカテゴリーは最後に表示されます。

使い方

<MTTopLevelCategories>もしくは>MTSubCategories>の sort_method 属性に、上述のソートメソッドの中から目的にあったものを指定します。

例:カテゴリー名の降順(半角アルファベットの大文字小文字区別無し)

<MTTopLevelCategories sort_method="CatSort::by_label_i_r">
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<li><MTCategoryLabel></li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
使い方:目的別解説
最近投稿した(or 編集した)エントリーの属するカテゴリーが上位に浮上するようにしたい
CatSort::by_recently_entry_XXXXedを使ってみましょう!
エントリー数で並べ替えたいのですが……
→CatSort::by_entry_countがあります!
とにかく自分の希望通りの(任意の)順序に並べ替えたい!
CatSort::by_descriptionで実現できます!

更新履歴

2006/11/18
ver.0.1 [初公開]
  • 基本的なメソッドを提供
2006/11/24
ver.0.2
  • 2つのメソッド by_recently_entry_posted, by_recently_entry_modified を追加
  • 無駄に日本語ローカライズ
2006/11/29
ver.0.3
  • 4つのメソッド by_description, by_description_r, by_description_i, by_description_i_r を追加
2006/12/21
ver.0.4
  • 2つのメソッド by_entry_count, by_entry_count_r を追加
  • by_recently_entry_posted, by_recently_entry_modified のパフォーマンスを改善
2006/12/22
ver.0.41
  • by_entry_count, by_entry_count_r で「非公開のエントリー」をカウントしないように修正
2006/12/22
ver.0.42 [Up!]
  • MT3.2x で使用する際、プラグイン一覧表示時にエラーが発生する不具合に対応。
    MT3.2x ではプラグイン一覧表示で説明等が英語表記になります。MT3.3x ではローカライズ表示されます。

免責事項

Movable Type のユーザーは目的を問わず、このプラグインを無償で自由に利用することができます。著作権は Antimon2 が保持します。
このプラグインは無保証です。このプラグインの利用によるいかなる損害にも作者は一切の責任を負いません。

トラックバック(6)

あんちもん2.Lab - CatSort ver.0.2 - エントリーの投稿と関連するカテゴリーソートメソッドを追加! (2006年11月24日 01:50)

カテゴリーソートプラグインをバージョンアップ。エントリーを投稿したカテゴリーが上位に浮上するようにできます! 続きを読む

あんちもん2.Lab - CatSort ver.0.3 - 「カテゴリーの説明」でソート可能に! (2006年11月29日 22:07)

CatSortプラグインをまたバージョンアップ。「カテゴリーの説明」を利用することで任意順序のソートが可能に! 続きを読む

あんちもん2.Lab - CatSort ver.0.4 - カテゴリーごとのエントリー数でソート! (2006年12月21日 23:35)

CatSortプラグインをバージョンアップ。「エントリー数」でのソートに対応。また一部パフォーマンスを改善。 続きを読む

あんちもん2.Lab - CatSort ver.0.41 - エントリー数のソートを修正 (2006年12月22日 22:30)

CatSortプラグインをマイナーバージョンアップ。エントリー数のカウント方法を修正。 続きを読む

あんちもん2.Lab - CatSort ver.0.42 - MT3.2における不具合を修正 (2007年1月19日 22:46)

CatSortプラグインをマイナーバージョンアップ。MT3.2でプラグイン一覧表示時にエラーが発生する不具合を修正。 続きを読む

ikzwmsys.com - カテゴリのソートに便利なplug-in (2009年5月14日 22:03)

あんちもん2.Labさんで紹介されておりました。カテゴリのソートに便利なplug... 続きを読む

コメント(3)

はじめまして。
とてもよく便利なので利用させていただいています。
希望なのですが、カテゴリー毎のエントリー数でソートする機能も付けていただけないでしょうか。
よろしくお願いします!

> tokioさん
お問い合わせありがとうございます(^-^)

カテゴリーごとのエントリー数ですね、なるほど。
by_recently_entry_***ed メソッドのロジックを少し変更すれば実現可能なので、やってみます。
要望ありがとうございます。

はじめまして。
有益なプラグイン、参考にさせていただいております。
カテゴリーソートの件で質問があります。

> CatSort::by_recently_entry_modified
> 最近エントリーが編集されたカテゴリーが先に表示されます。
> エントリーのないカテゴリーは最後に表示されます。
↑の状態を実現したく試しました。

親カテゴリーにはエントリーなしで、
↑のサブカテゴリーにエントリーしたところ、
ソートされまれず、最後に表示されてしまいます。
当然といえば当然ですが、親にないので、エントリーなしと判断して、最後尾にくるようです。

できれば、親が0でも、子にエントリーされたら、その親も子もひとくくりで最新として最上部に表示させたいのですが、可能でしょうか。
わかりづらい点がございましたら、質問ください。

カテゴリ

月別 アーカイブ

OpenID対応しています OpenIDについて

このブログ記事について

このページは、あんちもん2が2006年11月18日 23:01に書いたブログ記事です。

ひとつ前のブログ記事は「スマートで高機能!Counterプラグイン」です。

次のブログ記事は「CatSort ver.0.2 - エントリーの投稿と関連するカテゴリーソートメソッドを追加!」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。