準備作業
更新日:2024.02.01
SearchEntriesプラグインを、Movable Type 6のData APIに対応させました。
複数ブログにまたがる検索も可能です。
検索条件は従来通りテンプレートタグで書き、検索結果をData APIで得る形を取ります。
Data APIで検索する際の準備作業を解説します。
Movable Typeのコアのコードの書き換え
当プラグインでは、Movable Typeのコアのコードを一部書き換える必要があります。
1.並べ替えのための書き換え
カスタムフィールドの値で記事を並べ替える必要がある場合は、「lib」→「MT」→「ObjectDriver」→「Driver」ディレクトリにある「DBI.pm」の550行目~575行目を書き換えます。
書き換え方は、Movable Type 5.2の場合と同じです。
なお、この書き換えは、Data APIで検索しない場合でも行います。
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,
);
検索用テンプレートを判別するためのカスタムフィールドの作成
Data APIの検索用テンプレートかどうかを判断するために、検索対象のブログ(またはウェブサイト)に、以下のカスタムフィールドを作成します。
システムオブジェクト | テンプレート |
---|---|
名前 | DataAPI検索 |
種類 | チェックボックス |
必須? | チェックをオフにする |
規定値 | チェックをオフにする |
ベースネーム | data_api_search_template |
なお、説明とテンプレートタグは、自由に決めていただいて構いません。
また、複数のブログ(ウェブサイト)にまたがって検索する場合は、その中のどれか1つで上記のカスタムフィールドを作ります。