ブログ記事詳細検索プラグイン(その1・概要/インストール/ライセンス)

Movable TypeをCMSとして使う場合、検索機能が弱いことが1つの問題です。
ブログとしての簡易的な検索はできますが、複数の条件で絞り込んで検索するような機能がありません。

この問題を解決するプラグインとして、「SearchEntries」を公開します。
多機能なプラグインなので、数日に分けて順次解説します。
今日は、プラグインの概要と、インストールおよびライセンスについて述べます。

1.概要

SearchEntriesプラグインには、以下のような特徴があります。

  • ブログ記事のフィールド(タイトルや日付など)はもちろんのこと、カテゴリ/タグ/カスタムフィールドを組み合わせた柔軟な検索を行うことができます。
  • 検索の条件はテンプレートタグで指定します。
  • ブログ記事のフィールドや、カスタムフィールドで検索する場合、「値が○○に等しい」「値に○○を含む」「値が○○より大きい」といった条件で検索することができます。
  • カテゴリ/タグでの検索では、「○○か□□に属する(OR検索)」/「○○と□□に属する(AND検索)」のどちらも可能です。
  • カスタムフィールドの検索では、複数のカスタムフィールドを組み合わせた検索が可能です。
  • 拙作の「数値型のカスタムフィールドを追加するプラグイン」を組み合わせると、カスタムフィールドの数値も検索することができます。
  • ブログ記事のフィールドの値か、カスタムフィールドの値をキーにして、検索結果を並べ替えることができます。
    並べ替えのキーは複数指定することができます。
  • 静的な検索に使うことも、フォームと組み合わせた動的な検索を行うこともできます(ただし、動的な検索を行う場合は、拙作のいくつかのプラグインと組み合わせます)。

実際の例として、書籍「Movable Type 5実践テクニック」の中で紹介した「YOKOSUKA FOODS」のサイトがあります。
このサイトでは、各ページの左上に検索のフォームがあり、カテゴリとカスタムフィールド(生産地/価格帯)を組み合わせた検索を行うことができるようになっています。

2.対応バージョン

このプラグインは、Movable Type 5に対応しています。
また、Movable Type 4.2x以降でも動作するはずです(ただし、Movable Type 4.2xでのテストは行っていません)。

3.インストール

このプラグインは以下からダウンロードします。

SearchEntries_1_05.zip

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。

ダウンロードしたZipファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。

4.Movable Typeのソースの書き換え

並べ替え機能を動作させるために、Movable Type本体の「lib/MT/ObjectDriver/Driver/DBI.pm」ファイルの480~500行目付近を一部書き換える必要があります。
Movable Type 5.01では、以下のように書き換えます。

書き換え前

my $order = $args->{sort} || 'id';
if (! ref($order)) {
    my $dir = $args->{direction} &&
              $args->{direction} eq 'descend' ? 'DESC' : 'ASC';
    $stmt->order({
        column => $dbd->db_column_name($tbl, $order),
        desc   => $dir,
    });
} else {
    my @order;
    foreach my $ord (@$order) {
        push @order, {
            column => $dbd->db_column_name($tbl, $ord->{column}),
            desc => $ord->{desc},
        };
    }
    $stmt->order(\@order);
}

書き換え後(赤字の部分を追加/変更)

my $order = $args->{sort} || 'id';
if (! ref($order)) {
    my $tmp_tbl = $args->{sort_class} ? $driver->table_for($args->{sort_class}) : $tbl;
    my $dir = $args->{direction} &&
              $args->{direction} eq 'descend' ? 'DESC' : 'ASC';
    $stmt->order({
        column => ($args->{sort_alias} ? $args->{sort_alias} . '.' : '') . $dbd->db_column_name($tmp_tbl, $order),
        desc   => $dir,
    });
} else {
    my @order;
    foreach my $ord (@$order) {
        my $tmp_tbl = $ord->{sort_class} ? $driver->table_for($ord->{sort_class}) : $tbl;
        push @order, {
            column => ($ord->{sort_alias} ? $ord->{sort_alias} . '.' : '') . $dbd->db_column_name($tmp_tbl, $ord->{column}),
            desc => $ord->{desc},
        };
    }
    $stmt->order(\@order);
}

5.ライセンス

SearchEntriesプラグインは、以下のライセンスでご提供します。

5-1.商用ライセンスのMTと組み合わせる場合

商用ライセンスのMovable Typeと組み合わせる場合は、有償とさせていただきます。
料金は、導入先のMovable Type1件につき1,000円(消費税込)とします。
お振込み方法等の詳細につきましては、メールフォームからお問い合わせいただきますようお願いします。

なお、アカデミックライセンスと組み合わせる場合は、無償とさせていただきます。

5-2.個人無償ライセンスのMTと組み合わせる場合

個人無償ライセンスと組み合わせる場合は、無償でご利用いただくことができます。
ただし、以下に従ってご利用いただきますようお願いします。

  • 改変・再配布は自由に行っていただいてかまいません。

    ただし、ソースコード中のクレジットは残しておいてください。
  • 無料でご利用いただくことができます。

    ただし、プラグインの開発やサポートのご支援のために、ドネーションをご検討いただければ幸いです。
  • 当プラグインは無保証で提供します。

5-3.MTOSと組み合わせる場合

  • GPLv2に従います。
  • 無料でご利用いただくことができます。

    ただし、プラグインの開発やサポートのご支援のために、ドネーションをご検討いただければ幸いです。

6.SearchEntriesプラグイン関係の記事の一覧