SearchEntriesプラグイン(Data API対応その1・準備作業)

SearchEntriesプラグインを、Movable Type 6のData APIに対応させました。
複数ブログにまたがる検索も可能です。
検索条件は従来通りテンプレートタグで書き、検索結果をData APIで得る形を取ります。
今日は、Data APIで検索する際の準備作業を解説します。

1.プラグインのインストール

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

SearchEntries_1_11.zip

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

2.Movable Typeのコアのコードの書き換え

当プラグインでは、Movable Typeのコアのコードを一部書き換える必要があります。

2-1.並べ替えのための書き換え

カスタムフィールドの値で記事を並べ替える必要がある場合は、「lib」→「MT」→「ObjectDriver」→「Driver」ディレクトリにある「DBI.pm」の550行目~575行目を書き換えます。
書き換え方は、Movable Type 5.2の場合と同じです。
なお、この書き換えは、Data APIで検索しない場合でも行います。

2-2.Data API用の書き換え

Data APIで検索するために、Movable Typeのインストール先で、「lib」→「MT」→「DataAPI」→「Endpoint」ディレクトリにある「Common.pm」の378行目~400行目を、以下のように書き換えます。

書き換え前

my %load_options = (
    terms => { %$terms, @blog_id_term },
    args  => {%$args},
    sort_by    => $q->param('sortBy')    || '',
    sort_order => $q->param('sortOrder') || '',
    limit      => $limit,
    offset     => $offset,
    scope      => $scope,
    blog       => $blog,
    blog_id    => $blog_id,
    blog_ids   => $blog_ids,
    %$options,
);

my %count_options = (
    terms    => { %$terms, @blog_id_term },
    args     => {%$args},
    scope    => $scope,
    blog     => $blog,
    blog_id  => $blog_id,
    blog_ids => $blog_ids,
    %$options,
);

書き換え後

    my $opt_terms;
    if (ref $terms eq 'HASH') {
        $opt_terms = { %$terms, @blog_id_term };
    }
    else {
        $opt_terms = [ @$terms ];
        if (@blog_id_term) {
            push @{$opt_terms}, (
                '-and',
                { blog_id => $blog_id_term[1] }
            );
        };
    }
    my %load_options = (
        terms => $opt_terms,
        args  => {%$args},
        sort_by    => $q->param('sortBy')    || '',
        sort_order => $q->param('sortOrder') || '',
        limit      => $limit,
        offset     => $offset,
        scope      => $scope,
        blog       => $blog,
        blog_id    => $blog_id,
        blog_ids   => $blog_ids,
        %$options,
    );

    my %count_options = (
        terms => $opt_terms,
        args     => {%$args},
        scope    => $scope,
        blog     => $blog,
        blog_id  => $blog_id,
        blog_ids => $blog_ids,
        %$options,
    );

3.検索用テンプレートを判別するためのカスタムフィールドの作成

Data APIの検索用テンプレートかどうかを判断するために、検索対象のブログ(またはウェブサイト)に、以下のカスタムフィールドを作成します。

システムオブジェクトテンプレート
名前DataAPI検索
種類チェックボックス
必須?チェックをオフにする
規定値チェックをオフにする
ベースネームdata_api_search_template

なお、説明とテンプレートタグは、自由に決めていただいて構いません。
また、複数のブログ(ウェブサイト)にまたがって検索する場合は、その中のどれか1つで上記のカスタムフィールドを作ります。